繁体   English   中英

Symfony 5 捆绑服务。yaml - 没有扩展能够加载配置

[英]Symfony 5 bundle services.yaml - no extension able to load the configuration

我正在尝试为 Symfony 5 创建一个简单的自定义包。我的包结构如下所示:

- SqliteFileBundle
  - src
    - DependencyInjection
      - SqliteFileExtension.php
    - Resources
      - config
        - services.yaml
    - Services
      - SqliteFileDb.php
    - SqliteFileBundle.php

真的很简单,甚至是微不足道的。

SqliteFileExtension.php

namespace SqliteFile\Bundle\DependencyInjection;

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

/**
 * SqliteFileExtension
 */
class SqliteFileExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yaml');
    }
}

Resources/config/services.yaml

sqlite_file.db:
  public: true
  class: SqliteFile\Bundle\Services\SqliteFileDb
  arguments:
    $dbPath: "%env(resolve:SQLITE_FILE_DB_PATH)%"

SqliteFileBundle.php

namespace SqliteFile\Bundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

/**
 * SqliteFileBundle
 */
class SqliteFileBundle extends Bundle
{

}

当我尝试将此捆绑包加载到 Symfony 5 应用程序中时,它失败并显示:

There is no extension able to load the configuration for "sqlite_file.db"
Looked for namespace "sqlite_file.db", found "none".

无论我尝试什么,我都无法让这个微不足道的服务加载或解决这个错误。 如果我取出 YAML 负载,我可以看到捆绑包已加载(但显然什么也没定义,什么也不做)......请问我做错了什么,为什么我不能定义一个简单的服务并让它加载?

编辑:奇怪的是,我可以让它与扩展中的等效 XML 配置和 XML 文件加载器一起使用。 为什么? 为什么YAML版本不行? 如果可能的话,我宁愿使用 YAML 而不是 XML 。

<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services
        http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="sqlite_file.db" class="SqliteFile\Bundle\Services\SqliteFileDb">
            <argument key="$dbPath">%env(resolve:SQLITE_FILE_DB_PATH)%</argument>
        </service>
        <service id="sqlite_file.twig_extension" class="SqliteFile\Bundle\Twig\TwigExtension">
            <argument>sqlite_file.db</argument>
        </service>
    </services>
</container>

哇,我是个白痴。 花了大约 3 个小时追我的尾巴,结果我忘了添加services:作为我services.yaml中的根键。 如果错误消息将我指向那个方向会有所帮助,但我所有的谷歌搜索都在告诉我确保我使用的是正确的 snake_cased 包名称,我就是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM