【问题标题】:Forcing CodeIgniter to execute hooks functionality?强制 CodeIgniter 执行钩子功能?
【发布时间】:2011-05-01 03:17:26
【问题描述】:

您好,我在 Codeigniter 中遇到了钩子问题。我为 'post_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.

}

【问题讨论】:

    标签: php codeigniter error-handling


    【解决方案1】:

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

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

    【讨论】:

    • 感谢mway的链接。我之前也经历过。我想这是在控制器处于路由级别时执行的,即在执行索引文件之后。我的问题是我需要打电话show_404() 函数在许多基于数据操作的条件下,即是否返回数据。所以我已经去覆盖 show_404()。另外,如果我在之后使用 $CI->output->get_output() 函数在我的 show_404() 函数中加载视图,视图内容打印在 tht array() 中。问题是我无法呈现视图内容。
    • 你能发布一些代码吗? $this->load->view(...) 不应该给你带来问题...
    • 我已经更新了我的问题,如果您需要更详细的代码,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2019-01-08
    相关资源
    最近更新 更多