1

Symfony2 バンドル (FosUserBundle) を拡張しています。拡張バンドルで、いくつかの新しいサービスを宣言したいと思いますが、正しくDependencyInjection/SomethingExtension.phpservices.ymlもサービスにアクセスできません。

拡張機能は呼び出されservices.ymlないため、ロードされません。

そのようなサービス宣言を達成する方法を知っている人はいますか?

4

2 に答える 2

0

まず、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にサービスのリストが表示されます。

于 2013-03-02T02:16:25.223 に答える
0

バンドル コードで 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();
    }
}
于 2013-03-02T14:52:22.193 に答える