服务未加载到 Resources/config/services.yml,为什么?

Services not loaded at Resources/config/services.yml, why?

我 运行 这里有一个问题,我不知道为什么或哪里失败了,也许我错过了一些配置,无论如何,我在 DependencyInjection\AppExtension.php 文件中有这段代码:

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;

class AppExtension extends Extension
{
    /**
     * {@inheritdoc}
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }
}

然后在 Resources/config/services.yml 我有这个:

services:
    pdone.twig.extension:
        class: GroupDCA\PDOneBundle\Extension\PDOneTwigExtension
        tags:
            -  { name: twig.extension }

由于某种原因无法正常工作。这意味着我得到了这个错误:

The filter "empty" does not exist in PDOneBundle::pdone.html.twig at line 1

现在,如果我将服务定义移至 config/config.yml,则会收到此错误:

Compile Error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

这让我觉得捆绑包没有经过 DependecyInjection,我在这里缺少什么?为什么会出现不同的错误?

1) 您是否将捆绑包添加到 AppKernel

2) 我不确定,但我认为您必须遵循 Extension class 的命名约定:

  • Bundle 的根目录应包含 DependencyInjection 目录
  • DependencyInjection中,Extensionclass应命名为<BUNDLE>Extension,不带"Bundle"后缀。在你的情况下就是 PDOOneExtension