2

Ajax リクエストで例外エラー メッセージの表示を処理するために、独自のコントローラー アクションを呼び出すことはできますか?

このトピックに関する wiki が Yii ウェブサイトに書かれていますが、古くなっているようです。クラス CErrorHandler は、作者が wiki を書いてから変更されたようです。wiki では、次のコンポーネント プロパティを構成ファイルに追加することを推奨しています。

'errorHandler' => array(
    'errorAction' => 'site/error',
),

ただし、CApplication::displayError() が CErrorHandler で呼び出されるため、このコントローラー アクションに到達することはありません。

if($this->isAjaxRequest())
    $app->displayError($event->code,$event->message,$event->file,$event->line);

元の質問に戻りますが、Ajax リクエストでエラー メッセージの表示を処理する独自のコントローラー アクションを設定できますか?

4

2 に答える 2

0

やりたいことを実現する 1 つの方法は、CErrorHandlerクラスを置き換える (または拡張する) ことです。

ほとんどの場合、handle($event)またはhandleExceptionまたはのいずれかを再実装する必要がありますhandleError。ただし、isAjaxRequest常に false を返すように変更することもできます。この方法では、通常どおりに動作します。

必要な手順は次のとおりです。

protected/ErrorHandler.php

<?php
/**
 * ErrorHandler is the customized error handler for the application.
 */
class ErrorHandler extends CErrorHandler {
    public function handle($event) {
            // do something special ...
        parent::handle($event);
    }
    // more special things ...
}

protected/config/main.php

return array(
    // ...
    'components'=>array(
        // ...
        'errorHandler'=>array(
            'class' => 'ErrorHandler',
            // ...
            ),
        // ...
    ),
    // ...
);

それが役立つことを願っています!

于 2013-08-14T20:10:11.083 に答える
0

次のようなものを作ることができます:

$handler=$app->getErrorHandler();
$handler->errorAction='my/error';

これをテストしませんでしたが、うまくいくかもしれません。

また、エラーを ajax 成功呼び出しにプッシュすることもできます。

于 2013-07-24T14:28:30.747 に答える