首页 > 解决方案 > 如何在 SF4 的 Twig 扩展中注入依赖项

问题描述

我正在尝试将资产依赖项添加到 TwigExtension 但我最终得到:

无法自动装配服务“App\Twig\AppExtension”:方法“__construct()”的参数“$urlPackage”引用类“Symfony\Component\Asset\UrlPackage”,但不存在此类服务。

所以这基本上就是我正在做的事情:

use Symfony\Component\Asset\UrlPackage;

...

protected $urlPackage;
public function __construct(UrlPackage $urlPackage)
{
    $this->urlPackage = $urlPackage;
}

....

$url = $this->urlPackage->getUrl("build/assets/images/svg/notification.svg");

当然,我已经检查了天气或包裹是否存在:

/var/www/fromton # bin/console debug:container | grep assets
  Symfony\Component\Asset\Packages                                                     alias for "assets.packages"                                                                     
  assets._default_package                                                              Symfony\Component\Asset\PathPackage                                                             
  assets._version__default                                                             Symfony\Component\Asset\VersionStrategy\JsonManifestVersionStrategy                             
  assets.context                                                                       Symfony\Component\Asset\Context\RequestStackContext                                             
  assets.empty_package                                                                 Symfony\Component\Asset\Package                                                                 
  assets.empty_version_strategy                                                        Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy                                    
  assets.json_manifest_version_strategy                                                Symfony\Component\Asset\VersionStrategy\JsonManifestVersionStrategy                             
  assets.packages                                                                      Symfony\Component\Asset\Packages                                                                
  assets.path_package                                                                  Symfony\Component\Asset\PathPackage                                                             
  assets.static_version_strategy                                                       Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy                                   
  assets.url_package                                                                   Symfony\Component\Asset\UrlPackage                                                              
  console.command.assets_install                                                       Symfony\Bundle\FrameworkBundle\Command\AssetsInstallCommand                                     
  twig.extension.assets                                                                Symfony\Bridge\Twig\Extension\AssetExtension  

到底怎么回事?我也要进去做点什么services.yml吗?

标签: symfonydependency-injectionsymfony4

解决方案


我也应该在 services.yml 中做点什么吗?

是的,您需要定义一个新的服务别名来完成基于其 FQCN 的自动装配:

services:
    # ...

    Symfony\Component\Asset\UrlPackage: '@assets.url_package'

推荐阅读