2017-05-09 50 views
1

我想,所以我已經創建了一個全新的佈局和分配爲默認從頭樣式我的應用程序:是否可以在錯誤頁面中顯示默認佈局?

class AppController extends Controller { 

    public $components = array(
     'DebugKit.Toolbar', 
    ); 

    public function beforeRender() { 
     parent::beforeRender(); 

     $this->layout = 'app'; 
    } 
} 

但是,它似乎也影響CakePHP所產生的內部錯誤頁面,我需要發展:

Actual

有沒有一種方法,使這些頁面的使用app\View\Layouts\default.ctp代替app.ctp

Intended

回答

2

您可以通過創建一個自定義異常渲染做到這一點: -

// app/Lib/Error/AppExceptionRenderer.php 
class AppExceptionRenderer extends ExceptionRenderer { 

    public function render() { 
     $this->controller->layout = 'default'; 
     parent::render(); 
    } 

} 

然後在app /配置/ core.php中一定要告訴蛋糕使用你的AppExceptionRenderer類處理異常: -

​​

使用自定義的異常渲染器爲您在應用程序中處理異常的方式提供了更大的靈活性。

最後,從\AppController::beforeRender\AppController::beforeFilter移動定製的佈局定義,因此早期的運行,可以在出現錯誤時覆蓋:

class AppController extends Controller { 
    public function beforeFilter() { 
     parent::beforeFilter(); 
     $this->layout = 'app'; 
    } 
} 
+0

有沒有'\ ExceptionRenderer :: beforeFilter'回調。有'\ ExceptionRenderer :: render',但它沒有任何'layout'屬性。此外,'\ AppController :: beforeRender'在以後被調用* ...: - ? –

+0

對不起@ÁlvaroGonzález我的錯誤,你可以從'render'方法訪問控制器,並設置佈局。我已經更新了我的回答來證明這一點。 – drmonkeyninja

+0

謝謝。這會將佈局成功更改爲默認值,但之後'\ AppController :: beforeRender'將它重新設置爲'app'(記住,我需要將'default'設置回原因,因爲我正在修改它)。不知道我是否錯過了一些東西。 –

相關問題