0

Zend Framework 1.12 で奇妙なことがわかりました。

アクション関数で、存在しないオブジェクトを新規作成します。以下のようにコードします。

 public function signupAction ()
    {

        $tbuser = new mmmm();//mmmm does not exist, so there's exception here
    }

しかし、それは ErrorController にはなりません。

以下のコードを試してみましたが、動作します。ErrorController に目を向けると、Application Error が表示されました。

public function signupAction ()
{
    throw new Exception('pppp');
}

どうしたの?何か他の設定が必要ですか?

4

1 に答える 1

2

「クラスが見つかりません」はファルタエラーであるため、例外ではありません

そのため、Zend は $controller -> dispatch() を呼び出すときにそれをキャッチしません。

このブロックを参照してください (Zend_Controller_Dispatcher_Standard):

try {
    $controller->dispatch($action);
} catch (Exception $e) {
    //...
}

このエラーを回避するには、関数 class_exists を使用して、クラスを呼び出す前にクラスが定義されているかどうかを確認します。

このリンクを参照してください: class_exists

アップデート:

デフォルトでは、falta エラーにより、現在の php スクリプトがシャットダウンされます。

したがって、(1)エラーハンドラーをカスタマイズし、(2)Falta ErrorをExceptionに変更する必要があり、ErrorControllerでキャッチできます

このように (index.php で):

register_shutdown_function('__fatalHandler');

function __fatalHandler() {
    $error = error_get_last();
    if ( $error !== NULL && $error['type'] === E_ERROR ) {
        $frontController = Zend_Controller_Front::getInstance();
        $request = $frontController->getRequest();
        $response = $frontController->getResponse();
        $response->setException(new Exception('Falta error:' . $error['message'],$error['type']));

        ob_clean();// clean response buffer
        // dispatch
        $frontController->dispatch($request, $response);
    }
}

参照: Zend フレームワーク - PHP の致命的なエラーのエラー ページ

于 2013-09-22T04:55:41.710 に答える