2012-10-24 23 views
43

Tôi đang gặp khó khăn trong khi cố gắng hiển thị trang lỗi tùy chỉnh trong Silex.Những người trợ giúp Silex & Twig trong các trang lỗi tùy chỉnh

Theo những gì tôi tìm thấy trong liên kết này: http://refactoring.us/silex/custom-error-pages-with-silex-and-twig/

Tôi cố gắng để thiết lập một trang báo lỗi 404 tuỳ chỉnh trong ứng dụng của tôi. Tất cả mọi thứ hoạt động tốt cho đến khi tôi bắt đầu sử dụng những người trợ giúp trong mẫu của tôi.

Một mã gương mẫu cho mẫu trang lỗi 404 như sau: Mã

{% 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 để xử lý trong ứng dụng silex tôi lỗi:

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

Khi tôi loại bỏ

{{ url('home') }}
(điều này helper và tuyến đường công trình hoàn toàn trong các trường hợp khác!) Tôi nhận được trang web được hiển thị đúng, nhưng không có bản dịch.

Với sự giúp đỡ, tôi nhận được lỗi sau:

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 

Vì vậy, tôi cần một số hướng dẫn ở đây về những gì có thể là lý do có thể sau này được gây ra điều này và các bước để giải quyết vấn đề này. Tất cả trợ giúp đều được đánh giá cao.

+1

Tôi đã nghiên cứu này một chút và nó trông giống như một ngõ cụt của nó với Silex. Dường như hoặc là lỗi hoặc Silex không hỗ trợ người trợ giúp đã đăng ký trong trình xử lý lỗi. – lifo

+0

Vì sự cố tạo lỗi RouteNotFound và bạn đã chỉ định nó có thể liên quan đến chức năng url từ cầu nối, bạn đã thử sử dụng thông báo chuẩn của UrlGeneratorServiceProvider chẳng hạn như app.url_generator.generate ('home')? –

+0

Không chắc chắn 100% về Silex, nhưng trong Symfony khi sử dụng các mẫu lỗi tùy chỉnh, chúng thực sự bị bỏ qua nếu các mẫu (hoặc bất kỳ thứ gì trong trình xử lý) ném ngoại lệ hoặc lỗi. Điều này có thể là trường hợp với bạn. Hãy thử hiển thị mẫu lỗi tại một số tuyến đường gỡ lỗi và xem liệu đó có phải là trường hợp không. Bạn nên thử gỡ rối bước này theo bước với XDebug. Nó sẽ cung cấp cho bạn một sự hiểu biết tốt hơn về cách nó hoạt động anyway. –

Trả lời

1

Đây không phải là một vấn đề silex (tính đến nay) - Tất cả mọi thứ hoạt động hoàn hảo đứng về phía tôi (silex 1,2)

Bạn đã đăng ký các UrlGeneratorServiceProvider trong ứng dụng của bạn?

trong web/index.php:

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

Và bạn thực sự cần sử dụng path() thay vì url() trong trường hợp này:

{{ path('home') }} 
Các vấn đề liên quan