从控制台

时间:2016-09-16 01:52:26

标签: php symfony twig

我想从命令行(控制台命令)运行时在树枝模板中添加资产(图像)完整网址(带域和基础)。这意味着要发送到电子邮件。

问题是,使用absolute_url(asset())在控制台上运行时不包括主机和基本路径。

此外,正如http://symfony.com/doc/current/console/request_context.html中所述,它仅适用于网址,而不适用于资产。

我还尝试在从控制台运行时设置路由器上下文:

$context = $this->getContainer()->get('router')->getContext();
$context->setHost($defaultDomain);
$context->setScheme($scheme);

没有成功。有什么想法吗?

4 个答案:

答案 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}}