2017-02-23 11 views
2

Symfony2で例外をキャッチすることに関する多くの質問があり、私の状況に該当しないようです。Symfony2コントローラの InvalidArgumentExceptionをキャッチできません

私のコントローラに$this->forward()を呼び出そうとしていますが、それは私が捕まえられない\InvalidArgumentExceptionを投げます。私はちょうど500のエラーページを取得します。この例外をキャッチで

500 Internal Server Error - InvalidArgumentException 

私の試み:

try { 
    $response = $this->forward('FooBundle:Foo:bar', ['foo' => 'bar']); 
} catch (\InvalidArgumentException $ex) { 
    error_log($ex->getMessage()); 
} catch (\Exception $ex) { 
    // this doesn't work either 
} 

この例外は、ライン65上のSymfony\Component\HttpKernel\Controller\ControllerResolverにsymfonyによってスローされます。

throw new \InvalidArgumentException(sprintf('Controller "%s" for URI "%s" is not callable.', get_class($controller), $request->getPathInfo())); 

これは、SPLの例外のように見えます。そしてそれはが私が正しくそれを捕まえていたかのようにと表示されます。だから何が欠けている?

注:これは、それが何かと関係がある場合、これは私の開発環境です。

興味深いことに

、私のコントローラこのを置くことに動作します:

try { 
    throw new \InvalidArgumentException('Fake Exception'); 
} catch (\InvalidArgumentException $ex) { 
    // do nothing 
} 
+1

私の悪いことに、私は500エラーが 'forward()'の呼び出しからの実際の応答であることに気付かなかった。多分Qは削除されるべきです... –

答えて

0

ですから、エラーはフォワードの応答本体でした。これは技術的にでした。でした。 $this->forward()への呼び出しは問題ではありませんでした。問題は最初にを確認せずに応答本体を表示していたことです。

$response = $this->forward('FooBundle:Foo:bar', ['foo' => 'bar']); 
$content = (500 !== $response->getStatusCode()) 
    ? $response->getContent() 
    : ''; 

return new Response($content); 

注:try {} catch (\Exception $e) {}が完全に不要にし、このため、実際に無意味だったこれをすることによってそれを修正

0

あなたが試してみました:

$response = $this->forward('FooBundle:Foo:bar'); 

を私はあなたのコントローラがパラメータを必要としない限り、これが正しいと思います、配列にパラメーターを入れます。あなたはそれを試してみていただけますか?私はそれが問題を解決するだろう確信していない。

+0

paramsがあります、私はちょうど上記の私のコード例でそれらを含んでいませんでした。しかしそれは問題ではありません。とにかくありがとう! –

関連する問題