2012-10-24 7 views
43

Ich habe Probleme mit dem Versuch, eine benutzerdefinierte Fehlerseite in Silex zu rendern.Silex & Twig-Helfer in benutzerdefinierten Fehlerseiten

Nach dem, was ich in diesem Link: http://refactoring.us/silex/custom-error-pages-with-silex-and-twig/

Ich versuche, eine benutzerdefinierte 404-Fehlerseite in meiner Anwendung einzurichten. Alles funktioniert gut, bis ich anfange, Helfer in meiner Zweigvorlage zu verwenden.

Ein exemplarischer Code für Vorlage 404-Fehlerseite ist wie folgt:

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

Sobald i Werke entfernen

{{ url('home') }}
(diese Helfer und Route:

in meinem Silex App Umgang
{% 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-Code für die Fehler in anderen Fällen perfekt!) Ich bekomme die richtige Seite, aber ohne die Übersetzungen.

Mit dem Helfer, bekomme ich folgende Fehlermeldung:

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 

Also muss ich einige Hinweise hier auf das, was der mögliche Grund dafür sein könnte, dass diese und Schritte verursacht dieses Problem zu beheben. Alle Hilfe wird geschätzt.

+1

ich dies ein wenig recherchiert habe und es sieht aus wie seine eine Sackgasse mit Silex. Es scheint entweder ein Fehler zu sein oder Silex unterstützt nur registrierte Helfer im Fehlerhandler nicht. – lifo

+0

Da das Problem einen RouteNotFound-Fehler erzeugt und Sie bereits angegeben haben, dass es wahrscheinlich etwas mit der URL-Funktion von der Zweig-Bridge zu tun hat, haben Sie bereits versucht, die Standardnotation von UrlGeneratorServiceProvider wie app.url_generator.generate ('home') zu verwenden? –

+0

Nicht 100% sicher über Silex, aber in Symfony, wenn benutzerdefinierte Fehlervorlagen verwendet werden, werden sie tatsächlich ignoriert, wenn die Vorlagen (oder irgendetwas innerhalb des Handlers) Ausnahmen oder Fehler auslösen. Dies könnte bei Ihnen der Fall sein. Versuchen Sie, die Fehlervorlage auf einer Debug-Route zu rendern und sehen Sie, ob das der Fall ist. Sie sollten versuchen, dieses Schritt für Schritt mit XDebug zu debuggen. Es wird Ihnen ein besseres Verständnis darüber geben, wie es überhaupt funktioniert. –

Antwort

1

Dies ist kein Problem Silex (ab sofort) - Alles funktioniert perfekt auf meiner Seite (Silex 1,2)

Haben Sie den UrlGeneratorServiceProvider in der App anmelden?

in web/index.php:

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

Und Sie sollten wirklich path() statt url() in diesem Fall benutzen:

{{ path('home') }} 
Verwandte Themen