2014-10-07 6 views
5

Мне нужно сгенерировать почтовый шаблон в команде Symfony2, все работает, за исключением того, что {{app.request}} имеет значение null в Twig (мне нужно это для sheme и httpHost) потому что он вызывается из контекста cli. Я попытался изменить эту область с помощью:Symfony2: Получить app.request в Twig из команды

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

но он не обеспечивает app.request. Есть ли решение исправить это?

+1

Там ** не ** запрос, так как вы вызываете его из командной строки. Запрос создается из HTTP-запроса - команда не генерирует HTTP-запрос. Что вы пытаетесь получить от запроса? –

+0

Я получал такой ответ ... Мне нужно его создать изображение src: И эти шаблоны также используются с моим контроллером, я хотел бы избежать создания переменной для генерации этого src. – Spope

+0

Итак, да, нет просьбы и, следовательно, нет схемы или хоста. Вы можете передавать параметры при рендеринге шаблона. Или создавайте пользовательские функции Twig, которые генерируют 'src' на основе флага из команды. –

ответ

6

Руководство по Symfony предлагает настроить контекст запроса глобально, поэтому вы статическую конфигурацию своих параметров и программным образом задаете контекст компонента Symfony Router.

# 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

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 на функцию, а не жестко прописывать эту логику повсюду в шаблонах ,

Смежные вопросы