如何为非http请求生成绝对资源url
How to generate absolute assets url for non-http request
从 Symfony-2.7 开始,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')) }}
但问题是提供 absolute_url
的 HttpFoundationExtension
依赖于 "request stack",在非 http 请求的情况下它是空的。
因此 returns 没有任何转换的原始路径:
if (!$request = $this->requestStack->getMasterRequest()) {
return $path;
}
所以问题是 - 如何在基于 CLI 的应用程序中生成完整的 url?
一个重要注意事项:http://symfony.com/doc/current/cookbook/console/sending_emails.html当您使用absolute_url
helper时,这个建议不是实际的。
尝试将虚拟请求对象推送到 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);
从 Symfony-2.7 开始,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')) }}
但问题是提供 absolute_url
的 HttpFoundationExtension
依赖于 "request stack",在非 http 请求的情况下它是空的。
因此 returns 没有任何转换的原始路径:
if (!$request = $this->requestStack->getMasterRequest()) {
return $path;
}
所以问题是 - 如何在基于 CLI 的应用程序中生成完整的 url?
一个重要注意事项:http://symfony.com/doc/current/cookbook/console/sending_emails.html当您使用absolute_url
helper时,这个建议不是实际的。
尝试将虚拟请求对象推送到 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);