自定义错误页面中的 Silex 和 Twig 助手

Posted

技术标签:

【中文标题】自定义错误页面中的 Silex 和 Twig 助手【英文标题】:Silex & Twig helpers in custom error pages 【发布时间】:2012-10-15 01:04:14 【问题描述】:

我在尝试在 Silex 中呈现自定义错误页面时遇到问题。

根据我在此链接中找到的内容: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 %

我的 Silex 应用程序中用于错误处理的 php 代码:

$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

因此,我需要一些指导,了解导致此问题的可能原因以及解决此问题的步骤。感谢所有帮助。

【问题讨论】:

我对此进行了一些研究,它看起来像是 Silex 的死胡同。这似乎是一个错误,或者 Silex 只是不支持错误处理程序中的注册助手。 由于问题产生了 RouteNotFound 错误,并且您已经指定它可能与 twig 桥中的 url 函数有关,您是否已经尝试使用 UrlGeneratorServiceProvider 的标准符号,例如 app.url_generator。生成('home')? 不是 100% 确定 Silex,但是在 Symfony 中,当使用自定义错误模板时,如果模板(或处理程序中的任何内容)抛出异常或错误,它们实际上会被忽略。这可能是你的情况。尝试在某个调试路径上渲染错误模板,看看是否是这种情况。您应该尝试使用 XDebug 逐步调试。它会让你更好地理解它是如何工作的。 【参考方案1】:

这不是 Silex 的问题(截至目前)- 我这边一切正常(Silex 1.2)

您是否在您的应用中注册了UrlGeneratorServiceProvider

web/index.php:

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

在这种情况下,你真的应该使用path() 而不是url()

 path('home') 

【讨论】:

以上是关于自定义错误页面中的 Silex 和 Twig 助手的主要内容,如果未能解决你的问题,请参考以下文章

未找到Silex控制器

在Javascript / Jquery的Twig模板中添加翻译

php 基于内容类型的Drupal 8自定义页面模板(建议)(页面 - [content-type] .html.twig)

Silex - 选项方法

如何在 Shopware 6 中创建可以在 Twig 文件中使用的自定义 Javascript?

Drupal 8添加javascript并使用自定义模块在钩子中传递数据