2012-10-24 29 views
43

Silex'da özel bir hata sayfası oluşturmaya çalışırken bir sorunla uğraşıyorum. Bu linkte ne buldum göreÖzel hata sayfalarında Silex & Twig yardımcıları

: Benim uygulamada özel bir 404 hata sayfası oluşturmak için çalışıyorum http://refactoring.us/silex/custom-error-pages-with-silex-and-twig/

. Benim twig şablonunda yardımcıları kullanmaya başlayana kadar her şey iyi çalışıyor.

{% 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 kodu benim Silex app hata işleme için:

$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); 
}); 

i

{{ url('home') }}
(bu yardımcı ve rota çalışmalarını kaldırdıktan sonra aşağıdaki gibi

404 hata sayfası şablonu için örnek bir koddur Diğer durumlarda mükemmel bir şekilde!) Uygun şekilde işlenmiş siteyi alıyorum, ancak çeviriler olmadan. yardımcısı ile

, ben şu hatayı alıyorum:
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 

Bu yüzden bu sorunu çözmek için bu ve adımları neden olduğunu bunun arkasında olası nedeni ne olabilir burada bazı rehberliğine ihtiyacım var. Tüm yardımlar takdir edildi. Her şey

uygulamanızda UrlGeneratorServiceProvider kaydetti mi

yanımda ( Silex 1.2) üzerinde mükemmel çalışıyor -

+1

ve onun çıkmaz benziyor Silex. Ya bir hata ya da Silex hata işleyicisi içinde kayıtlı yardımcıları desteklemiyor gibi görünüyor. – lifo

+0

Sorun bir RouteNotFound Hatası oluşturduğundan ve zaten belirtmişseniz, muhtemelen twig köprüsünden gelen url işleviyle ilgili bir şey var, zaten urlGeneratorServiceProvider gibi standart bir notaion kullanmayı denediniz mi? App.url_generator.generate ('home')? –

+0

Silex hakkında% 100 emin değilsiniz, ancak özel hata şablonları kullanırken Symfony'de, şablonlar (veya işleyicinin içindeki herhangi bir şey) istisnalar veya hatalar atıyorsa, aslında göz ardı edilmektedir. Bu senin için de geçerli olabilir. Hata şablonunu bazı hata ayıklama yolunda oluşturmayı deneyin ve durumun böyle olup olmadığını görün. XDebug ile bu adım adım hata ayıklamayı denemelisiniz. Yine de nasıl çalıştığını daha iyi anlayacaktır. –

cevap

1

Bu Silex sorun (şimdi itibariyle) değil mi?

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

Ve gerçekten bu durumda path() yerine url() kullanmalıdır:

web/index.php yılında bu biraz araştırdık

{{ path('home') }}