Как создать URL-адрес абсолютных активов для запроса, отличного от http


Начиная с Symfony-2.7 3-й аргумент метода asset (логическое значение, указывающее, следует ли создавать абсолютный URL-адрес) устарел.

Из источников:

@trigger_error('Generating absolute URLs with the Twig asset() function was deprecated in 2.7 and will be removed in 3.0. Please use absolute_url() instead.', E_USER_DEPRECATED);

Таким образом, официальным способом создания его совместимым с Symfony-3.0 способом стало:

{{ absolute_url(asset('some/asset.css')) }}

Проблема, однако, заключается в том, что HttpFoundationExtension, предоставляющий absolute_url, полагается на "стек запросов", который пуст в случае не http-запроса.

Таким образом, он возвращает исходный путь без каких-либо преобразования:

    if (!$request = $this->requestStack->getMasterRequest()) {
        return $path;
    }

Https://github.com/symfony/symfony/blob/2.7/src/Symfony/Bridge/Twig/Extension/HttpFoundationExtension.php#L59

Итак, вопрос в том, как сгенерировать полный URL-адрес в приложении на основе командной строки?

Важное примечание: http://symfony.com/doc/current/cookbook/console/sending_emails.html этот совет не актуален, когда вы используете помощника absolute_url.

Author: zerkms, 2015-07-28

1 answers

Попробуйте отправить фиктивный объект запроса в службу request_stack, также настройте контекст запроса в parameters.yml, как сказано в sending_emails.html

    $request = new Request();
    // if you use locales
    $request->setLocale("en");
    // to be able to render twig asset absolute paths we have to inject dummy request
    $container->enterScope('request');
    $container->set('request', $request, 'request');
    $container->get('request_stack')->push($request);
 0
Author: miniyarov, 2015-08-04 21:19:37