在Symfony2中->;Twig,如何检测执行是从CLI模式还是通过浏览器?

在Symfony2中->;Twig,如何检测执行是从CLI模式还是通过浏览器?,symfony,twig,Symfony,Twig,我正在制作一个Symfony2控制台命令,该命令将发送一封呈现细枝模板的电子邮件。 电子邮件模板使用一些标准布局,这些布局也包含在从浏览器请求发送的电子邮件中。 在此模板中,我有以下链接: {{ url('deal_category_index', {'city':app.session.get('system.user.city'), 'slug':cat.getSlug()}) }} 但是,如果在CLI模式下使用app.session时,会出现以下错误: An exception has

我正在制作一个Symfony2控制台命令,该命令将发送一封呈现细枝模板的电子邮件。 电子邮件模板使用一些标准布局,这些布局也包含在从浏览器请求发送的电子邮件中。 在此模板中,我有以下链接:

{{ 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呈现的,这样我就可以使用“通用”方法来创建此链接


谢谢大家!

从控制器中的会话中提取城市并将其传递给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()时,应该从数据库而不是会话中获取城市。

从控制器中的会话中提取城市并将其传递给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()时,您应该从数据库而不是会话中获取城市。

根据请求上下文将布局部分包装到块中:

{% block foobar_url %}
  {{ url('deal_category_index', {'city':app.session.get('system.user.city')}) }}
{% endblock %}
与以前一样,在从浏览器发送的电子邮件中使用此布局

覆盖CLI模板中的代码块
foobar\u url
,如下所示:

{% block foobar_url %}
  {{ url('deal_category_index', {'city':cityRetrievedFromDatabaseOrElsewhere}) }}
{% endblock %}

根据块中的请求上下文包装布局零件:

{% block foobar_url %}
  {{ url('deal_category_index', {'city':app.session.get('system.user.city')}) }}
{% endblock %}
与以前一样,在从浏览器发送的电子邮件中使用此布局

覆盖CLI模板中的代码块
foobar\u url
,如下所示:

{% block foobar_url %}
  {{ url('deal_category_index', {'city':cityRetrievedFromDatabaseOrElsewhere}) }}
{% endblock %}