2016-05-18 88 views
0

我在做教程跟着http://book.cakephp.org/3.0/en/development/errors.html#exception-renderer但它不工作並顯示空白頁面。CakePHP3 - 自定義頁面錯誤404不起作用

在配置/ bootstrap.php中

use App\Error\AppError; 
$errorHandler = new AppError(); 
$errorHandler->register(); 

在SRC /錯誤/ AppError.php

<?php 
namespace App\Error; 

use Cake\Error\BaseErrorHandler; 

class AppError extends BaseErrorHandler 
{ 
    public function _displayError($error, $debug) 
    { 
     return 'There has been an error!'; 
    } 
    public function _displayException($exception) 
    { 
     return 'There has been an exception!'; 
    } 

    public function handleFatalError($code, $description, $file, $line) 
    { 
     return 'A fatal error has happened'; 
    } 
} 

我創建的src /模板/佈局/ my_error.ctp my_error.ctp。並在我的src/Template/Error/error404.ctp中將佈局更改爲my_error.ctp。

$this->layout = 'my_error'; 

最後,在我的控制器

use Cake\Network\Exception\NotFoundException; 
$staff = $this->Staff->find()->where(['Staff.StaffId = '=> $id, 'Staff.PartnerId = ' =>$this->partnerId])->first(); 
if (empty($staff)) { 
    throw new NotFoundException(__('Staff not found')); 
} 

回答

0

每當遇到空白頁,啓用調試模式,再次訪問該網址,並檢查您的錯誤日誌。

但是,這種情況下的問題很可能是文檔不正確/誤導,因爲示例應用錯誤根本就不會執行任何操作。 _前綴的方法是protected,讓他們返回一些沒有效果,handleFatalError是要返回一個布爾值。

只要看看the source of Cake\Error\BaseErrorHandlerthe core error handler Cake\Error\ErrorHandler,你正在覆蓋的方法是產生輸出!

您可能希望報告爲at GitHub以上的問題。

如果你想要做的是創建一個自定義的4xx錯誤頁面,那麼你所需要做的就是相應地編輯src/Template/Error/error400.ctp模板。

0

我發現了我的錯誤。 :( 因爲在bootstrap.php中我在文件末尾複製下面的代碼,所以Cake不能理解它。請關閉此問題。謝謝支持。

use App\Error\AppError; 
$errorHandler = new AppError(); 
$errorHandler->register();