2012-10-24 16 views
43

Silexにカスタムエラーページを表示しようとしているときに問題が発生しています。私は、このリンクで見つけたものによるとカスタムエラーページのSilex&Twigヘルパー

http://refactoring.us/silex/custom-error-pages-with-silex-and-twig/

私は自分のアプリケーションでカスタム404エラーページを設定しようとしています。私の小枝テンプレートでヘルパーを使い始めるまで、すべてうまく動作します。次のように

404エラーページのテンプレートのための例示的なコードは次のとおりです。私のサイレックスアプリでのエラー処理のための

{% extends "layout.html.twig" %} 

{% block main %} 
<div id="error404"> 
    <h2>{{ app.translator.trans('page404.title') }}</h2> 
    <p>{{ app.translator.trans('page404.para1') }}</p> 
    <p class="btn-footer"> 
     <a href="{{ url('home') }}" class="btn">{{ app.translator.trans('page404.button') }}</a> 
    </p> 
</div> 
{% endblock %} 

PHPコード:

$app->error(function (\Exception $e, $code) use($app) { 
    switch ($code) { 
     case 404: 
      $message = $app['twig']->render('error404.html.twig'); 
      break; 
     default: 
      $message = $app['twig']->render('error500.html.twig'); 
    } 
    return new Response($message, $code); 
}); 

私は

{{ url('home') }}
(このヘルパーやルート作品を削除したら、他の場合は完全に!)私は適切なレンダリングサイトを取得しますが、翻訳は必要ありません。ヘルパーで

、私は次のエラーを取得する:

Fatal error: Uncaught exception 'Symfony\Component\Routing\Exception\RouteNotFoundException' with message 'Route "" does not exist.' in D:\projects\projectname\application\vendor\symfony\routing\Symfony\Component\Routing\Generator\UrlGenerator.php:119 Stack trace: 
#0 D:\projects\projectname\application\vendor\symfony\twig-bridge\Symfony\Bridge\Twig\Extension\RoutingExtension.php(45): Symfony\Component\Routing\Generator\UrlGenerator->generate(NULL, Array, false) 
#1 D:\projects\projectname\application\vendor\twig\twig\lib\Twig\Environment.php(327) : eval()'d code(68): Symfony\Bridge\Twig\Extension\RoutingExtension->getPath(NULL, Array) 
#2 D:\projects\projectname\application\vendor\twig\twig\lib\Twig\Template.php(265): __TwigTemplate_ca53e56b87abd45da5c34a79d4c2ce34->doDisplay(Array, Array) 
#3 D:\projects\projectname\application\vendor\twig\twig\lib\Twig\Template.php(239): Twig_Template->displayWithErrorHandling(Array, Array) 
#4 D:\projects\projectname\application\vendor\twig\twig\lib\Twig\Envir in D:\projects\projectname\application\vendor\twig\twig\lib\Twig\Template.php on line 280 

だから私はこのと、この問題を解決するための手順を引き起こしている。この背後にある原因として何ができるかについて、ここでいくつかのガイダンスを必要としています。すべての助けに感謝します。

+1

、それはとのデッドエンドのように見えますシレックスこれはバグであるか、シレックスはエラーハンドラ内の登録されたヘルパーをサポートしていないようです。 – lifo

+0

この問題はRouteNotFoundエラーを生成しており、すでに指定されていれば、これはおそらく、枝ブリッジからのurl関数と関係しているでしょうか?app.url_generator.generate( 'home')のようなUrlGeneratorServiceProviderの標準表記を使って試してみましたか? –

+0

Silexについて100%は確信していませんが、カスタムエラーテンプレートを使用するときはSymfonyでは、テンプレート(またはハンドラ内のもの)が例外やエラーをスローすると、実際には無視されます。これはあなたの場合かもしれません。いくつかのデバッグルートでエラーテンプレートをレンダリングしてみてください。 この手順をXDebugでデバッグするとよいでしょう。とにかくそれがどのように動作するかをよりよく理解することができます。 –

答えて

1

これは(今のところ)サイレックスの問題ではありません - すべては私の側に完璧に動作します(サイレックス 1.2)

あなたのアプリでUrlGeneratorServiceProviderを登録しましたか?

$app->register(new Silex\Provider\UrlGeneratorServiceProvider()); 

そして、あなたは本当にこのケースでpath()代わりのurl()を使用する必要があります:

web/index.phpに、私は、このビットを研究してきました

{{ path('home') }}