0

我在几个 Twig 模板中有这段代码:

{% if is_granted('IS_AUTHENTICATED_REMEMBERED') == false %}
    {{ render(controller('FOSUserBundle:Security:login')) }}
    {% include 'FOSMapyetBundle:Registration:register.html.twig' with {form:form} %}
{% endif %}

正如您可能看到的,它form从控制器接收参数,但是在我喜欢使用代码的每个站点中都会出现问题,让我们在模板中说我需要将参数传递form给视图。到目前为止,它只有 15 个模板,但这让我想,如果明天应该是 20 个或 60 个甚至 100 个模板呢?那么处理这个问题的最佳解决方案是什么?树枝扩展?Symfony 服务?对此有任何建议或帮助吗?

4

3 回答 3

1

当您需要这样的逻辑时,最好的选择是渲染一个子控制器,就像您已经对登录表单所做的那样。

在你的包中创建一个 RegistrationController 来创建表单并返回呈现的 register.html.twig,然后像包含上面的行一样嵌入它。

于 2014-05-13T05:35:23.190 回答
1

内核事件侦听器可能会为此工作。在侦听器中渲染您的迷你模板,然后将其“注入”到最终响应中,类似于调试工具栏的工作方式:

https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/WebProfilerBundle/EventListener/WebDebugToolbarListener.php#L106

请注意,如果您想通用地修改所有页面,这可能是您可能需要的方法。您可以在侦听器内部应用检查以忽略 ajax 请求、重定向等。您也可以实现一个简单的地图,该地图知道哪些路线应该修改响应。

如果您想在特定页面中显式呈现模板,那么我同意 Maerlyn。

于 2014-05-13T11:43:30.100 回答
0

您可以使用响应事件,并在模板末尾的代码上注入您的平安。

http://api.symfony.com/2.4/Symfony/Component/HttpKernel/KernelEvents.html

于 2014-05-13T14:22:36.580 回答