Symfony2 バンドル (FosUserBundle) を拡張しています。拡張バンドルで、いくつかの新しいサービスを宣言したいと思いますが、正しくDependencyInjection/SomethingExtension.php
てservices.yml
もサービスにアクセスできません。
拡張機能は呼び出されservices.yml
ないため、ロードされません。
そのようなサービス宣言を達成する方法を知っている人はいますか?
Symfony2 バンドル (FosUserBundle) を拡張しています。拡張バンドルで、いくつかの新しいサービスを宣言したいと思いますが、正しくDependencyInjection/SomethingExtension.php
てservices.yml
もサービスにアクセスできません。
拡張機能は呼び出されservices.yml
ないため、ロードされません。
そのようなサービス宣言を達成する方法を知っている人はいますか?
まず、AppKernal.phpでバンドルを有効にしました。あなたがそれをしたことを願っています:)
次、
プロセスを処理する新しい「Extension」クラスを作成する必要があります。このクラスは、バンドルのDependencyInjectionディレクトリに存在する必要があり、その名前は、Bundleクラス名のBundleサフィックスをExtensionに置き換えて作成する必要があります。たとえば、AcmeHelloBundleのExtensionクラスはAcmeHelloExtensionと呼ばれます
SRC:Doc だから、次のようになります
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');
}
最後に、このコマンドラインツールを使用して、サービスがロードされているかどうかをデバッグします。
コマンドライン
php app/console container:debug
にサービスのリストが表示されます。
バンドル コードで getContainerExtension をオーバーライドすることにより、(命名の問題に関係なく) 拡張クラスが確実に呼び出されるようにすることができます。
namespace Cerad\Bundle\AccountBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Cerad\Bundle\AccountBundle\DependencyInjection\AccountExtension;
class CeradAccountBundle extends Bundle
{
public function getContainerExtension()
{
return new AccountExtension();
}
}