Php Symfony 5 bundle services.yaml-没有能够加载配置的扩展
我正在尝试为Symfony 5创建一个简单的自定义包。我的包结构如下所示: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 真的很简
- 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中的等效配置,有人知道这是否有原因吗?