2012-12-04 29 views
0

我遇到了一個相當複雜的情況來渲染錯誤頁面 1)蛋糕異常NotFoundException從插件拋出; 2)我想從應用渲染布局,而不是從這個插件;cakephp2:如何設置蛋糕異常的佈局

我試圖設置$ this-> layout ='default';在插件控制器的beforeFilter方法中,但仍呈現插件佈局而不是應用佈局。

我看着CakeErrorController,但沒有找到設置佈局的位置。

任何想法如何管理?

+0

我有一個類似的問題:http://cakephp.lighthouseapp.com/projects/42648/tickets/3304-exceptions-always-render-default-layout - 好像沒有簡單的解決方案這個。我討厭擴大例外只是爲了切換佈局:) – mark

回答

0

我不確定這是否適用於您,但這是我所做的。我(在我的AppController)設置在__construct()功能:

function __construct() { 

     parent::__construct(); 

     if ($this->name == 'CakeError') { 
      $this->layout = 'default'; 
      $this->constructClasses(); 


      $this->beforeFilter(); 

      $this->beforeRender(); 
     } 
    } 

同樣,你的方法可能會有所不同,但是這是我實現它。

此外,您可以在定義的錯誤處理程序中使用AppError.php文件進行設置。被警告,我的方法是用於Cake 1.3,所以我不知道Cake2中的AppError文件有多不同。

<?php 
class AppError extends ErrorHandler { 


function error403($params) { 
    extract($params, EXTR_OVERWRITE); 

    if (!isset($url)) { 
     $url = $this->controller->here; 
    } 

    $this->controller->helpers = array_merge($this->controller->helpers, array('Asset.Asset', 'Auth')); 

    $url = Router::normalize($url); 


    $this->controller->set(array(
     'code' => '403', 
     'name' => __('Permission Denied', true), 
     'message' => $message, 
     'base' => $this->controller->base 
    )); 


    $this->_outputMessage('error403'); 

    } 
} 
+0

最後的,可能會工作的方式,是在錯誤視圖文件中設置'$ this-> layout' ='yourlayout'。 –