Symfony2:从命令中检索Twig中的app.request

时间:2014-10-07 13:22:40

标签: php symfony twig

我需要在Symfony2命令中生成一个邮件模板,一切正常,除了{{app.request}}在Twig中为空(我需要它用于sheme和httpHost),因为它是从cli上下文调用的。我试图改变这个范围:

$this->getContainer()->enterScope('request');
$this->getContainer()->set('request', new Request(), 'request');

但它没有提供app.request。有解决方案可以解决这个问题吗?

2 个答案:

答案 0 :(得分:6)

Symfony指南建议在全局配置请求上下文,因此您可以使用参数进行静态配置,并以编程方式设置Symfony路由器组件的上下文。

# app/config/parameters.yml
parameters:
  router.request_context.host: example.org
  router.request_context.scheme: https
  router.request_context.base_url: my/path


 // src/Acme/DemoBundle/Command/DemoCommand.php

 // ...
class DemoCommand extends ContainerAwareCommand
{
 protected function execute(InputInterface $input, OutputInterface $output)
 {
    $context = $this->getContainer()->get('router')->getContext();
    $context->setHost('example.com');
    $context->setScheme('https');
    $context->setBaseUrl('my/path');

    // ... your code here
 }
}

There is a specific paragraph for this problem on the guide

答案 1 :(得分:3)

在你的命令中:

$this->render('template.html.twig', [
    'scheme' => 'https',
    'host' => 'example.com',
]);

在你的模板中:

{% if app.request is defined %}{{ app.request.scheme }}{% else %}{{ scheme|default('http') }}{% endif %}

就个人而言,我会将img src生成抽象为一个函数,而不是在模板中的所有位置硬编码。