Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 5 bundle services.yaml-没有能够加载配置的扩展_Php_Symfony_Bundle - Fatal编程技术网

Php Symfony 5 bundle services.yaml-没有能够加载配置的扩展

Php Symfony 5 bundle services.yaml-没有能够加载配置的扩展,php,symfony,bundle,Php,Symfony,Bundle,我正在尝试为Symfony 5创建一个简单的自定义包。我的包结构如下所示: - SqliteFileBundle - src - DependencyInjection - SqliteFileExtension.php - Resources - config - services.yaml - Services - SqliteFileDb.php - SqliteFileBundle.php 真的很简

我正在尝试为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');
    }
}
namespace SqliteFile\Bundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

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

}
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\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');
    }
}
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>

%环境(解析:SQLITE\u文件\u数据库\u路径)%
sqlite_file.db

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

默认键来自bundle的类名。请尝试使用sqlite_文件而不是sqlite_file.db。您还可以从bundle类的内部覆盖它。错误实际上来自config/packages中的应用程序配置文件。再次使用sqlite_文件而不是sqlote_文件.db。@Cerad已经尝试过了,同样的错误。好吧,奇怪的是,我可以让它使用services.xml,但不能使用YAML中的等效配置,有人知道这是否有原因吗?