Отобразить представление для ошибки 404 в CodeIgniter

CodeIgniter имеет очень простое сообщение об ошибке 404 по умолчанию:

404 Page Not Found
The page you requested was not found.

Вместо того, чтобы использовать это сообщение об ошибке на полностью пустой странице, я хочу обернуть это сообщение между моим представлением заголовка и нижнего колонтитула, чтобы сообщение об ошибке выглядело аналогично другим страницам.

С этой целью я создал представление об ошибке? Например:

my404_view.php

<? $this->load->view('header'); ?>
404 Page Not Found
The page you requested was not found.
<? $this->load->view('footer'); ?>

Теперь, как я могу использовать этот my404_view.php в качестве представления по умолчанию для отображения 404 сообщений вместо использования сообщения об ошибке по умолчанию CodeIgniter.

Ответ 1

Вы должны изменить свои маршруты .php. Например:

в приложении /config/routes.php

$route['404_override'] = 'welcome/_404';

в приложении/контроллерах/welcome.php

function _404(){
    $this->load->view("my404_view");
}

И этого должно быть достаточно в текущей версии CI.

Ответ 2

Включение заголовков и нижних колонтитулов на странице 404 с ошибкой по умолчанию, похоже, является общей проблемой для пользователей CodeIgniter. Я хотел бы добавить эту ссылку: Саймон Эмс пишет в http://www.simonemms.com/2011/05/06/codeigniters-404-override-problem/, потому что он так четко описывает проблему. Я пробовал предложения http://maestric.com/doc/php/codeigniter_404 и играл с идеями Саймона Эммса и другими, но просто не могу их реализовать. Я немного новичок в PHP и CodeIgniter, так что это может быть из-за невежества. Тем не менее, трудно обеспечить, чтобы вы поместили предлагаемые подклассы в нужные места и правильно настроили, например, route.php. По прошествии 3 дней с точки зрения различных довольно сложных идей мне пришло в голову, что я могу просто использовать оператор include на странице ошибки 404 по умолчанию. Единственная трудность заключалась в выяснении пути перехода к заявлению include. В строке /system/core/Exceptions.php 146 я обнаружил, что разработчики CodeIgniter используют APPPATH. Затем вам нужно добавить путь к страницам заголовка и нижнего колонтитула, которые вы хотите включить. Моя новая страница 404 с ошибкой по умолчанию выглядит следующим образом:

<?php
include APPPATH.'/views/templates/header.php';
?>
<div id="container">
    <h1><?php echo $heading; ?></h1>
    <?php echo $message; ?>
</div>
<?php
include APPPATH.'/views/templates/footer.php';
?>

Мне кажется, это намного проще, чем пытаться изменить основные классы в CodeIgniter.