我有一個控制器,我需要檢查url中的有效標識,如果ID不匹配,則返回show_404()
。CodeIgniter 3:show_404()只顯示模板文件,而不顯示控制器
當我面臨的問題是,當我打電話show_404()
那隻能說明view/error/404.html
,而不是定製my404
控制器,我在routes.php
差異配置是my404
控制器添加頁眉和頁腳相同view/error/404.html
我有一個控制器,我需要檢查url中的有效標識,如果ID不匹配,則返回show_404()
。CodeIgniter 3:show_404()只顯示模板文件,而不顯示控制器
當我面臨的問題是,當我打電話show_404()
那隻能說明view/error/404.html
,而不是定製my404
控制器,我在routes.php
差異配置是my404
控制器添加頁眉和頁腳相同view/error/404.html
爲了有一個調用show_404()時自定義404頁面,您需要擴展核心。
當你簡單地將它添加到路由中時,它不會影響show_404()。
在應用程序/文件夾的核心:
class MY_Exceptions extends CI_Exceptions {
/**
* 404 Error Handler
*
* @uses CI_Exceptions::show_error()
*
* @param string $page Page URI
* @param bool $log_error Whether to log the error
* @return void
*/
public function show_404($page = '', $log_error = TRUE)
{
if (is_cli())
{
// For CLI
$heading = 'Not Found';
$message = 'The controller/method pair you requested was not found.';
echo $this->show_error($heading, $message, 'error_404', 404);
}
else
{
// For view
$CI = &get_instance();
$CI->layout->show('front/error/404', $CI->view_data); //Note I am using layout library. You'll probably use $CI->load->view()
echo $CI->output->get_output();
}
// By default we log this, but allow a dev to skip it
if ($log_error)
{
log_message('error', $heading.': '.$page);
}
exit(4); // EXIT_UNKNOWN_FILE
}
}
I confirm這工作正常,但建議添加$ CI-> output-> set_status_header('404');在$ CI =&get_instance()之後; –
此代碼可以正常工作,但不適用於CLI,因爲您已更改CLI以及HTML的輸出。你應該做一個if - > else類型的語句並輸出兩種不同的方式。 –
@BrianGottier我編輯了答案 –
分享'router.php'你這讓代碼。 – Tpojka
其簡單, '$ route ['default_controller'] ='home';' '$ route ['404_override'] ='my404';' '$ route ['translate_uri_dashes'] = FALSE;' – user3526