簡體   English   中英

CakePHP 2.0+使用異常的自定義錯誤視圖

[英]CakePHP 2.0+ custom error views using exceptions

我在這里一直在閱讀以下問題: CakePHP 2.0-如何制作自定義錯誤頁面?

關於在CakePHP 2.0+中為異常處理創建自定義視圖,並一直將其用作在我自己的應用程序中開始執行相同操作的基礎,因此引發了我自己的問題。

但是我沒有遵循邏輯。 例如,Throw NotFoundException如何知道如何在錯誤控制器中調用notFound方法,因為在命名方面我看不到任何直接關系...除非我遺漏了要點?

無論如何,我都希望添加404、403和401錯誤,然后能夠創建自定義視圖,並在整個應用中使用異常處理程序對其進行調用。

誰能對此給予更多的了解? 我正在使用最新版本的Cake 2.1

所以我有以下代碼:

    App::uses('ExceptionRenderer', 'Error');

    class AppExceptionRenderer extends ExceptionRenderer {

        public function notFound($error) {
            $this->controller->redirect(array('controller' => 'errors', 'action' => 'error404'));
        }
}

我想用呈現自定義錯誤視圖替換該重定向:

我試過了:

$this->controller->layout = null;
$this->controller->render('/Errors/error404');

但這只是顯示一個空白頁...有人可以幫我嗎,因為我不想執行重定向,而寧願遵循約定並在出現錯誤時使用相同的URL呈現實際視圖。

更新:還注意到自定義視圖僅在控制器中手動調用異常時才會調用,而不是針對諸如domain.com/garbageurl或其他某些東西的實際錯誤...所以它似乎並沒有按照我的想法做!

看一下核心Cake的以下文件:

這是正在發生的事情:

  • ErrorHandler::handleException()是您的異常處理程序 引發異常時調用它。
  • ErrorHandler::handleException()調用ExceptionRenderer::__construct() (您的自定義異常渲染器必須擴展ExceptionRenderer ),該解析器分析拋出的Exception的名稱,並由此設置$this->method
  • 然后, ErrorHandler::handleException()調用ExceptionRenderer::render() ,后者使用call_user_func_array()來調用名稱為$this->method

我只是在尋找同樣的事情,但沒有找到一個巧妙的方法來做到這一點使用AppExceptionRenderer 它只是不允許您擁有單獨的error403和error404模板文件。

所以我只是在/app/View/Errors/error400.ctp文件中執行了/app/View/Errors/error400.ctp操作...

<? if ($error instanceof ForbiddenException) { ?>

    <h4>Whoops! The page you attempted to access 
        requires permissions that you don't have.</h4>  

<? } else { ?>

    <h4>Whoops! We couldn't find the page you were looking for, sorry!</h4> 

<? } ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM