在kohana 3.3模板控制器中显示自定义异常

时间:2014-08-21 14:58:28

标签: php templates controller kohana hmvc

我希望在我的应用程序中显示自定义异常页面。在文档中写道: "注意:我们也可以使用HMVC向另一个页面发出子请求,而不是在HTTP_Exception本身中生成响应。"问题是我不知道该怎么做。 我正在使用的代码是:

class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 {

    /**
     * Generate a Response for the 404 Exception.
     *
     * The user should be shown a nice 404 page.
     *
     * @return Response
     */
    public function get_response()
    {
        $view = View::factory('errors/404');

        // Remembering that `$this` is an instance of HTTP_Exception_404
        $view->message = $this->getMessage();

        $response = Response::factory()
            ->status(404)
            ->body($view->render());

        return $response;
    }
}

它正在运行,但我需要在当前使用的模板中显示该消息。 此致

1 个答案:

答案 0 :(得分:1)

如果你想要的只是使用模板,你不需要打扰子请求。这是一个简单的方法:

class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 {

    public function get_response()
    {
        $view = View::factory('errors/404');

        // Remembering that `$this` is an instance of HTTP_Exception_404
        $view->message = $this->getMessage();

        // Wrap it in our layout
        $layout = $layout = View::factory('template');
        $layout->body = $view->render();

        $response = Response::factory()
            ->status(404)
            ->body($layout->render());

        return $response;
    }
}

如果您真的必须使用子请求,请正常执行子请求:

class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 {

    public function get_response()
    {
        $request = Request::factory('route_to_error_page_action')
            ->method(Request::POST)
            ->post(array('message' => $this->getMessage()));
        $response = $request->execute();

        // If you didn't return the 404 code from the sub-request, uncomment this:
        $response->status(404);

        return $response;
    }
}