2012-10-24 43 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代碼錯誤在我的Silex的應用程序處理:

$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

我研究這一點,它看起來像它的一條死衚衕與Silex的。它似乎是一個錯誤,或者Silex不支持錯誤處理程序中的註冊助手。 – lifo

+0

由於問題創建了一個RouteNotFound錯誤,並且您已經指定它可能與來自樹枝橋的url函數有關,請問您是否已經嘗試使用UrlGeneratorServiceProvider的標準通知,如app.url_generator.generate('home')? –

+0

關於Silex不是100%確定的,但在Symfony中使用自定義錯誤模板時,如果模板(或處理程序中的任何內容)拋出異常或錯誤,則實際上會忽略它們。你可能會遇到這種情況。嘗試在某些調試路由上渲染錯誤模板,看看是否是這種情況。 您應該嘗試使用XDebug逐步進行調試。它會讓你更好地理解它是如何工作的。 –

回答

1

這不是一個問題的Silex(截至目前) - 一切都完美的作品在我身邊(的Silex 1.2)

你已經註冊在你的應用程序的UrlGeneratorServiceProvider

web/index.php

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

而且你真的應該使用path()代替url()在這種情況下:

{{ path('home') }}