Редирект является самым чистым; загрузка представления также может работать.
Проблема здесь в том, что show_404 () обычно вызывается ПОСЛЕ того, как ваш контроллер уже загружен (что-то должно было сказать, что он покажет 404). CI не любит загружать второй контроллер в этой точке, что является основным препятствием.
Лучшим вариантом, вероятно, является расширение функции show_404 () в классе Exceptions для перенаправления на ваш маршрут 404. Без перенаправления вы застрянете с отображением представления или того, что, как вы знаете, имеет все «дополнительные данные», необходимые для вызова 404 (или, я думаю, вы могли бы загрузить его и в классе Exceptions). Это может быть очень сложно в некоторых динамических представлениях.
Вы, очевидно, хотите что-то более продвинутое, чем просто редактирование шаблона 404 в папке ошибок. У меня возникли проблемы при попытке получить доступ к get_instance () из этого файла, так как иногда он загружается до того, как будет создан контроллер. Так что будьте осторожны, если вы попробуете это;)
Обновление: Вот рабочий пример расширения функции show_404 () для загрузки представления
<?php
// application/core/MY_Exceptions.php
class MY_Exceptions extends CI_Exceptions {
public function show_404()
{
$CI =& get_instance();
$CI->load->view('my_notfound_view');
echo $CI->output->get_output();
exit;
}
}