我正在制作一个Symfony2控制台命令,它将发送一个呈现Twig模板的电子邮件。 电子邮件模板使用一些标准布局,该布局也包含在从浏览器请求发送的电子邮件中。 在这个模板中,我有一些像这样的链接:
{{ url('deal_category_index', {'city':app.session.get('system.user.city'), 'slug':cat.getSlug()}) }}
但如果我在CLI模式下使用app.session
,我会收到此错误:
An exception has been thrown during the rendering of a template ("You cannot create a service ("request") of an inactive scope ("request").")
所以我需要一种方法来了解模板是否从CLI呈现,因此我可以使用“通用”方式来创建此链接。
谢谢!
答案 0 :(得分:0)
从控制器中的会话中提取城市并将其传递给render()函数。这样,您的模板应如下所示:
{{ url('deal_category_index', {'city': city, 'slug':cat.getSlug()}) }}
在你的控制器中:
$this->render("YourBundle:Yourcontroller:yourView.html.twig', array('city' => $this->get('session')->get('system.user.city'), 'cat' => $category);
在CLI中调用render()时,您应该从数据库而不是会话中获取城市。
答案 1 :(得分:0)
根据块中的请求上下文包装布局部分:
{% block foobar_url %}
{{ url('deal_category_index', {'city':app.session.get('system.user.city')}) }}
{% endblock %}
在浏览器上下文发送的电子邮件中使用此布局,就像之前一样。
覆盖CLI模板中的代码块foobar_url
,如下所示:
{% block foobar_url %}
{{ url('deal_category_index', {'city':cityRetrievedFromDatabaseOrElsewhere}) }}
{% endblock %}