Как проверить, соответствует ли текущая страница 404?

Как проверить, возвращает ли текущая страница ошибку 404 из модуля /шаблона?

20 голосов | спросил Andrey Rudenko 21 FebruaryEurope/MoscowbTue, 21 Feb 2012 21:15:47 +0400000000pmTue, 21 Feb 2012 21:15:47 +040012 2012, 21:15:47

3 ответа


33

В Drupal 7 вы можете использовать drupal_get_http_header() .

В файле template.php используйте этот код.

$status = drupal_get_http_header("status");
if ($status === '404 Not Found'){
  // Do something.
}

В Drupal 8 вы можете использовать следующий код в hook.

$route_name = \Drupal::request()->attributes->get('_route');
if ('system.404' === $route_name) {
  // Do something.
}
ответил fzmaster 21 FebruaryEurope/MoscowbTue, 21 Feb 2012 21:35:17 +0400000000pmTue, 21 Feb 2012 21:35:17 +040012 2012, 21:35:17
6

Drupal 8.2.x:

К сожалению, drupal_get_http_header («статус») больше не работает.

Try:

$status = \Drupal::requestStack()->getCurrentRequest()->attributes->get('exception');
if ($status && $status->getStatusCode() == 404){

}

Здесь обсуждается следующее: https://www.drupal.org/node/1969270

ответил Gervase 18 MaramSat, 18 Mar 2017 00:48:56 +03002017-03-18T00:48:56+03:0012 2017, 00:48:56
3

Это самый простой способ обнаружить отказ в доступе (403) и страницу не найден (404) в Drupal 7.

// get the menu router item for the current page
$router_item = menu_get_item();

// if there is no router item, this page is not found
$is_page_not_found_404 = empty($router_item);

// if 'access' is empty for the router item, access is denied
$is_access_denied_403 = empty($router_item['access']);
ответил Lindsay 26 PM00000050000002931 2014, 17:52:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132