如何从服务中生成资产URL?

Nic*_*nte 9 php symfony

我正在使用Symfony 2,我想从服务类生成绝对URL,而不是模板.我想要同样的事情

{{ asset('/path/to/my/asset') }}
Run Code Online (Sandbox Code Playgroud)

会在模板中返回.

这可能吗?

Cer*_*rad 15

看看:Symfony/Bundle/TwigBundle/Extension/AssetExtension

public function getAssetUrl($path, $packageName = null)
{
    return $this->container->get('templating.helper.assets')->getUrl($path, $packageName);
}
Run Code Online (Sandbox Code Playgroud)

基本上,将templating.helper.assets注入您的服务然后调用getUrl.

  • 我如何获得绝对URL? (14认同)

Tho*_*uer 6

这是Symfony 2.8简单而干净的方式:

services.yml:

arguments:
    assets: "@templating.helper.assets"
Run Code Online (Sandbox Code Playgroud)

在服务中:

protected $assets;

public function __construct($assets)
{
    $this->assets = $assets;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在服务的任何功能中使用它,如下所示:

$this->assets->getUrl('myurl');
Run Code Online (Sandbox Code Playgroud)

  • 在Symfony 3.X中,服务`templating.helper.assets`已被删除并替换为`assets.packages`. (5认同)