您好我在Codeigniter中遇到钩子问题。我已经为'post_controller'编写了钩子,它调用了一个Controller函数并加载了模板(布局视图模板)。它适用于所有正常情况案例。但是现在我需要创建一个自定义错误页面。所以我重写了show_404()函数。在这个函数中我使用了get_instance();函数来获取CI对象。使用CI对象我正在调用一个函数来设置布局参数。现在我面临的问题是,当我尝试在自定义异常类的show_404()函数中加载视图时,视图是没有加载,因为 post_controller 挂钩没有被执行。我尝试了很多东西但失败了。 任何人都可以建议我任何方式来做这个。或者任何其他方式来渲染自定义404页面。
function show_404($page = ''){ // error page logic
header("HTTP/1.1 404 Not Found");
$heading = "404 Page Not Found";
$message = "The page you requested was not found ";
$CI =& get_instance();
$metadata[AppContants::META_TITLE] = '404 Page Not Found | Door and Window';
$metadata[AppContants::META_KEYWORDS] = '';
$metadata[AppContants::META_DESCRIPTION] = '';
$CI->setMeta($metadata);
$params['LAYOUT_MAINVIEW']='404_page';
$CI->renderView($params);// this is the function in my controller which sets the parameter for my template.Or it would also be very helpful if i can load the view directly as show below.
$CI->load->view('404_page'); // Loading view directly.
}
答案 0 :(得分:0)
看看this link。基本上你可能想要为错误创建一个控制器,然后子类CI_Router
将所有错误请求路由到该控制器,你可以在那里添加挂钩或加载你选择的控制器并间接执行挂钩。 / p>
编辑:问题很可能是您发送的响应标头(404) - 许多浏览器将用自己的404页面替换服务器返回的任何内容。尝试删除header()
电话,看看会发生什么。 $CI->load->view()
应按预期工作。此外,如果renderView()
不是全局函数,则可能需要使用对包含该方法的特定控制器的引用。