Copy the old 404 code into the new location. Still need to futz with it.

8.0.x
Larry Garfield 2012-03-15 23:55:14 -05:00
parent da5fba747f
commit f078c8c38d
2 changed files with 49 additions and 2 deletions

View File

@ -1,5 +1,7 @@
<?php
use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Drupal\Core\Database\Database;
/**
@ -711,7 +713,10 @@ function drupal_site_offline() {
* bubble up to menu_execute_active_handler() should call drupal_not_found().
*/
function drupal_not_found() {
drupal_deliver_page(MENU_NOT_FOUND);
throw new NotFoundHttpException();
//drupal_deliver_page(MENU_NOT_FOUND);
}
/**
@ -724,7 +729,10 @@ function drupal_not_found() {
* drupal_access_denied().
*/
function drupal_access_denied() {
drupal_deliver_page(MENU_ACCESS_DENIED);
throw new AccessDeniedException();
//drupal_deliver_page(MENU_ACCESS_DENIED);
}
/**

View File

@ -54,6 +54,45 @@ class HtmlSubscriber implements EventSubscriberInterface {
*/
public function onNotFoundHttpException(GetResponseEvent $event) {
if ($this->isHtmlRequestEvent($event) && $event->getException() instanceof NotFoundHttpException) {
watchdog('page not found', check_plain($_GET['q']), NULL, WATCHDOG_WARNING);
// Check for and return a fast 404 page if configured.
// @todo Inline this rather than using a function.
drupal_fast_404();
$system_path = $event->getRequest()->attributes->get('system_path');
// Keep old path for reference, and to allow forms to redirect to it.
if (!isset($_GET['destination'])) {
$_GET['destination'] = $system_path;
}
$path = drupal_get_normal_path(variable_get('site_404', ''));
if ($path && $path != $system_path) {
// @TODO: Um, how do I specify an override URL again? Totally not clear.
// Do that and sub-call the kernel rather than using meah().
$request = $event->getRequest()->duplicate();
// Custom 404 handler. Set the active item in case there are tabs to
// display, or other dependencies on the path.
menu_set_active_item($path);
$return = menu_execute_active_handler($path, FALSE);
}
if (empty($return) || $return == MENU_NOT_FOUND || $return == MENU_ACCESS_DENIED) {
// Standard 404 handler.
drupal_set_title(t('Page not found'));
$return = t('The requested page "@path" could not be found.', array('@path' => request_uri()));
}
drupal_set_page_content($return);
$page = element_info('page');
print drupal_render_page($page);
$event->setResponse(new Response('Not Found', 404));
}
}