2012-10-24 10 views
43

Sono in difficoltà con un problema durante il tentativo di eseguire il rendering di una pagina di errore personalizzata in Silex.Assistenti Silex e Twig in pagine di errore personalizzate

Secondo quello che ho trovato in questo link: http://refactoring.us/silex/custom-error-pages-with-silex-and-twig/

Sto cercando di impostare una pagina di errore 404 personalizzata nella mia applicazione. Tutto funziona bene fino a quando non comincio a utilizzare gli helper nel mio modello di ramoscello.

Un codice esemplare per errore 404 modello di pagina è la seguente: Codice

{% 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 per la gestione nel mio Silex app errore:

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

Una volta che rimuovo

{{ url('home') }}
(questo helper e rotte opere perfettamente in altri casi!) Ricevo il sito reso corretto, ma senza le traduzioni.

Con l'aiutante, ottengo il seguente errore:

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 

quindi ho bisogno di alcune indicazioni qui su quello che potrebbe essere la possibile ragione di questo che sta causando questo e passaggi per risolvere il problema. Tutto l'aiuto è apprezzato.

+1

Ho ricercato questo un po 'e sembra che la sua un vicolo cieco con Silex. Sembra che sia un bug o Silex non supporta gli helper registrati all'interno del gestore degli errori. – lifo

+0

Poiché il problema crea un errore RouteNotFound e hai già specificato che probabilmente ha qualcosa a che fare con la funzione url dal bridge ramoscello, hai già provato a utilizzare la nota standard di UrlGeneratorServiceProvider come app.url_generator.generate ('home')? –

+0

Non sicuro al 100% di Silex, ma in Symfony quando si utilizzano modelli di errore personalizzati, vengono infatti ignorati se i modelli (o qualsiasi cosa all'interno del gestore) generano eccezioni o errori. Questo potrebbe essere il tuo caso. Prova a mostrare il modello di errore su un percorso di debug e verifica se questo è il caso. Dovresti provare a eseguire il debug di questa procedura dettagliata con XDebug. Ti darà una migliore comprensione di come funziona comunque. –

risposta

1

Questo non è un problema Silex (fin d'ora) - Tutto funziona perfettamente sul mio lato (Silex 1,2)

Ti sei registrato il UrlGeneratorServiceProvider nella tua app?

in web/index.php:

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

E si dovrebbe davvero utilizzare path() invece di url() in questo caso:

{{ path('home') }} 
Problemi correlati