2011-08-16 1 views
5

私はここで説明する特殊変数$messagehttp://www.symfony-project.org/cookbook/1_2/en/error_templatesを使用してみましたが、この変数はsymfony 1.4で定義されていない、少なくともそれはこのようthrow new sfException('some message')symfony 1.4:error.html.phpに例外メッセージを渡すには?

例外に渡されたメッセージが含まれていないようだあなたはこれを渡すための他の方法を知っていますかerror.html.phpへのメッセージ?

答えて

7

カスタムエラー処理を行う必要があります。私たちは自分自身でsymfonyのカスタムアクションを実行しました。ただし、このアクション自体が例外を発生させる可能性があるので注意してください。そのことを考慮する必要があります。

次のような場合があります。最初のイベントのリスナーを追加し、良い場所はProjectConfiguration.class.phpファイルのようになります。

$this->dispatcher->connect('application.throw_exception', array('MyClass', 'handleException')); 

イベントハンドラを使用してあなただけのメールにしたい場合は、例えば、例外でやりたいことには十分かもしれません管理者へのスタックトレース。私たちはフィードバックフォームを表示して処理するカスタムアクションに移りたいと思っていました。あなたは今、何でも行うことができますアクション自体では

all: 
    .actions: 
    error_500_module:  error 
    error_500_action:  error500 
settings.ymlの

にあなたは今例外上に転送するモジュールとアクションを設定することができ

class MyClass { 
    public static function handleException(sfEvent $event) { 
    $moduleName = sfConfig::get('sf_error_500_module', 'error'); 
    $actionName = sfConfig::get('sf_error_500_action', 'error500'); 
    sfContext::getInstance()->getRequest()->addRequestParameters(array('exception' => $event->getSubject())); 
    $event->setReturnValue(true); 
    sfContext::getInstance()->getController()->forward($moduleName, $actionName); 
    } 
} 

:私たちのイベントハンドラは、このような何かを見て例外で欲しい、例えば。フィードバックフォームを表示して管理者に連絡してください。 $ request-> getParameter( 'exception')を使用して例外自体を取得することができます

+1

+1ありがとうございました!私たちのシステムはテーマをサポートしており、これがなければエラー500ページのテーマをサポートすることはできませんでした。とても有難い。 – flu

+0

あなたの答えをありがとう!あなたのカスタム関数を 'application.throw_exception' *に接続すると、そのイベントのsymfonyのデフォルトの動作が上書きされますか?はいの場合は、カスタム関数の中で 'self :: parent()'を呼び出すことでそれを防ぐことができますか?私はちょうどいくつかの機能を追加したいと思っています。 – Tapper

+1

@Tapperあなたは戻り値を変更することでそれを達成できるはずです。代わりに$ event-> setReturnValue(false)を試してください – Gerry

0

sfContextを使用して例外メッセージをerror.html.phpに渡すことができますが、カスタム関数を使用する必要があります例外をスローします。たとえば:throw new sfException('some message')を使用してのinstedより

class myToolkit { 
    public static function throwException($message) 
    { 
     sfContext::getInstance()->set('error_msg', $message); 
     throw new sfException($message); 
    } 

は、あなたは私がはるかに簡単な答えを見つけたと思うerror.html.php使用<?php echo sfContext::getInstance()->get('error_msg') ?>

1

にメッセージを表示するにはmyToolkit::throwException('some message')

を使用する必要があります。 Symfony 1.4について$messageは実際には定義されていませんが、$exceptionは(それには例外オブジェクトが含まれています)。

ただエコー$exception->messageです。

Etvoilà!

関連する問題