Php 强制CodeIgniter执行钩子功能?

Php 强制CodeIgniter执行钩子功能?,php,codeigniter,error-handling,Php,Codeigniter,Error Handling,您好,我在Codeigniter中遇到了一个钩子问题。我为“post\u controller”编写了钩子,它调用一个控制器函数并加载模板(布局视图模板)。它在所有正常情况下都能正常工作。但是现在我需要创建一个自定义错误页。因此我重写show_404()函数。在这个函数中,我使用get_instance();函数获取CI对象。我正在使用CI对象调用一个函数来设置布局参数。现在我面临的问题是,当我尝试在show_404()中加载视图时自定义异常类的函数视图未加载,因为未执行post\u控制器钩子。

您好,我在Codeigniter中遇到了一个钩子问题。我为“post\u controller”编写了钩子,它调用一个控制器函数并加载模板(布局视图模板)。它在所有正常情况下都能正常工作。但是现在我需要创建一个自定义错误页。因此我重写show_404()函数。在这个函数中,我使用get_instance();函数获取CI对象。我正在使用CI对象调用一个函数来设置布局参数。现在我面临的问题是,当我尝试在show_404()中加载视图时自定义异常类的函数视图未加载,因为未执行post\u控制器钩子。我尝试了很多方法,但都失败了。 任何人都可以建议我任何方法来做到这一点。或任何其他方式来呈现自定义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.

}
看一看。基本上,您可能需要为错误创建一个控制器,然后子类
CI_Router
将所有错误请求路由到该控制器,您可以在那里添加钩子,或者加载您选择的控制器并间接执行钩子


编辑:问题很可能是您发送的响应头(404)-许多浏览器将用自己的404页面替换服务器返回的任何内容。尝试删除
header()
调用,看看会发生什么<代码>$CI->load->view()应按预期工作。另外,如果
renderView()
不是全局函数,您可能需要使用对包含该方法的特定控制器的引用。

感谢mway提供的链接。我以前也讨论过这个问题。我想这是在控制器处于路由级别时执行的,即在执行索引文件之后。我的问题是我需要调用show_404()函数的许多条件都是基于数据操作的,即是否返回数据。因此,我选择覆盖show_404()。此外,如果在show_404()函数中加载视图后使用$CI->output->get_output()函数,则视图内容将打印在tht数组()中。问题是我无法呈现视图内容。您可以发布一些代码吗<代码>$this->load->view(…)应该不会给你带来问题…我已经更新了我的问题,这会有什么帮助。如果你需要更多详细的代码,请告诉我。