0

エラーページをレンダリングするのに非常に複雑な状況に遭遇しました。1)ケーキ例外 NotFoundException がプラグインからスローされます。2) このプラグインではなくアプリからレイアウトをレンダリングしたい。

$this->layout='default'; を設定しようとしました。プラグイン コントローラーの beforeFilter メソッドでは、アプリ レイアウトではなくプラグイン レイアウトがレンダリングされます。

CakeErrorController を調べましたが、レイアウトが設定されている場所が見つかりませんでした。

これを管理する方法はありますか?

4

1 に答える 1

1

これがうまくいくかどうかはわかりませんが、これが私がやったことです。私は(AppControllerで)__construct()関数に設定しました:

    function __construct() {

        parent::__construct();

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


            $this->beforeFilter();

            $this->beforeRender();
        }   
    }

繰り返しますが、あなたの方法は異なるかもしれませんが、それが私の実装です。

また、定義済みのエラー ハンドラで AppError.php ファイルを使用して設定することもできます。私のアプローチはCake 1.3用だったので、AppErrorファイルがCake2でどのように異なるかはわかりません.

<?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');

    }   
}
于 2012-12-05T13:05:55.010 に答える