0

特定のエラーについて、Web アプリケーションを介してユーザー フレンドリーなエラー メッセージを提供しようとしています。スロー例外呼び出しと「USER」などの追加パラメーターを渡すことができるようにしたいので、エラーコントローラーはこのパラメーターをビューに与え、おそらくより親しみやすい色と意味のあるメッセージで別のスタイルのページを表示しますが、できます追加の引数を渡す方法がわかりません。現在の設定は次のとおりです。

コントローラの 1 つをチェックインします。

throw new Zend_Controller_Exception("User not found",403);

エラーコントローラー (ErrorController.php):

class ErrorController
    extends Zend_Controller_Action
    {
        public function errorAction()
        {
        $errors = $this->_getParam('error_handler');
        switch ($errors->type) {

だから私は次のようにできるようにしたい:

$this->view->type = $this->_getParam('type');

コントローラーで、ビューでこれを行うことができます:

if($this->type == "USER") {
    some css stuff
    echo $this->exception;
4

1 に答える 1

4

あなたができるように聞こえます:

  1. 他のパラメーターを受け入れるカスタム例外クラス (My_Exception_UserFriendlyなど) を作成します。

  2. コントローラー (または他の場所) で、カスタムパラメーターを使用してこの例外をスローし、

  3. ビュー変数を入力するには、instanceofチェックを使用します。ErrorController

そして、すでにお気づきのように、レンダリングを試みる前に、ビューがそのユーザーフレンドリーなデータの存在を確認するようにしてください。

アップデート

実際、もっとよく読んでみると、追加情報を運ぶために例外が必要なようには見えません。検出/レンダリングの目的には、カスタム クラスを作成するだけで十分です。

で空の (!) 例外クラスを作成できますlibrary/My/Exception/UserFiendly.php

class My_Exception_UserFriendly extends Exception
{
}

次に、わかりやすい方法でユーザーに表示したいエラーが発生した場合は、次のタイプの例外をスローします。

if ($rainyDay){
    throw new My_Exception_UserFriendly('Seeing some inclement weather, I\'m afraid');
}

次に、あなたのErrorController::errorAction()

$exception = $this->_getParam('error_handler')->exception;
if ($exception instanceof My_Exception_UserFriendly){
    $this->view->friendlyErrorMessage = $exception->getMessage();
}

最後に、あなたの view-script の下にerror/error.phtml

<?php if ($this->friendlyErrorMessage): ?>
<h2>With Humble Apologies, Valued User</h2>
<p><?= $this->escape($this->friendlyErrorMessage) ?></p>
<?php endif; ?>

実際、私たちがレンダリングする特定のメッセージは純粋にビューに関する考慮事項であると主張する人もいます。その場合、サポートしたいわかりやすいメッセージごとUserFriendlyにカスタム例外を作成できます。おそらく、この一般的な例外を拡張します。次に、 で特定のサブタイプを検出し、そのサブタイプを識別するビューにキーを設定します。次に、ビューで、指定されたキーに対応する特定のわかりやすいメッセージをレンダリングします。純粋さのためだけにやり過ぎかもしれませんが、それらの考慮事項を重視する人のためにそこに投げ出します.ErrorController

于 2012-06-22T08:54:11.023 に答える