我想从命令行(控制台命令)运行时在树枝模板中添加资产(图像)完整网址(带域和基础)。这意味着要发送到电子邮件。
问题是,使用absolute_url(asset())在控制台上运行时不包括主机和基本路径。
此外,正如http://symfony.com/doc/current/console/request_context.html中所述,它仅适用于网址,而不适用于资产。
我还尝试在从控制台运行时设置路由器上下文:
$context = $this->getContainer()->get('router')->getContext();
$context->setHost($defaultDomain);
$context->setScheme($scheme);
没有成功。有什么想法吗?
答案 0 :(得分:1)
要配置请求上下文(URL生成器使用),您可以将其用作默认值的参数重新定义为更改默认主机(localhost)和方案(http)
# app/config/parameters.yml
parameters:
router.request_context.host: example.org
router.request_context.scheme: https
router.request_context.base_url: my/path
http://symfony.com/doc/current/console/request_context.html
#command
/** @var \Twig_Environment $twig */
$twig = $this->getContainer()->get('twig');
die($twig->render('view.html.twig'));
#view.html.twig
{{ absolute_url(asset('images/logo.png')) }}
#output
https://example.org/images/logo.png
答案 1 :(得分:0)
在我的应用程序中,特别针对电子邮件的这种情况,我将全局变量添加到Twig配置中:
# app/config/config.yml
twig:
globals:
site_addr: "%site_addr%"
在parameters.yml中设置此变量
# app/config/parameters.yml
site_addr: https://some.site
最后,在每个电子邮件模板中我使用了这个:
# AppBundle/Resources/views/Emails/layout.html.twig
<img src="{{ site_addr ~ asset('SomeAssetName') }}"/>
答案 2 :(得分:0)
您必须定义base_urls
参数。
framework:
assets:
base_urls: ['http://localhost:8000']
答案 3 :(得分:0)
您可以使用此解决方案,该解决方案不需要在配置中添加任何变量或参数,并且与Twig用于public function yourAction(AssetsHelper $assetsHelper, HttpFoundationExtension $httpExtension)
{
$assetsPath = $assetsHelper->getUrl('/img/test.jpg');
$assetFullUrl = $httpExtension->generateAbsoluteUrl($assetPath);
}
$assetFullUrl
您资产的完整网址将位于{{1}}