2012-02-27 4 views
1

私はKnpMenuBundleを使用しており、メニュービルダークラス内のDoctrine Entity Managerにアクセスしたいと考えています。私は、メニューに表示する必要があるいくつかの異なる値についてデータベースをチェックしたいと思います。 EMをコンストラクタに渡してみましたが、動作しません。これを達成する最良の方法は何ですか?ありがとう!KnpMenuBundle内のEntity Managerにアクセスする方法は?

ここで私はビルダークラスに追加されたコードです:

private $em; 

public function __construct(EntityManager $em) 
{ 

    $this->em = $em; 


} 

これは、エラーがスローされます:キャッチできる致命的なエラー:XXX \ ThemeBundle \メニュー\ビルダーに渡される引数1 :: __構築物()のインスタンスでなければなりませんDoctrine \ ORM \ EntityManagerのいずれも指定されていません。

+0

をそれはDOEなぜうまくいきませんか?何らかのエラーが発生しましたか?代わりにDoctrineオブジェクトを渡してみましたか? –

+0

コードとエラーで更新しました。どうも! – Acyra

答えて

6

コンストラクタでは、引数としてEntityManagerを渡す必要はありません。 BuilderクラスがContainerAwareクラスを拡張する場合は、*Menuメソッドに次の行を追加してEntityManagerオブジェクトにアクセスできます。

$em = $this->container->get('doctrine.orm.entity_manager'); 
0

がサービスに追加読むことができますあなたはentiredコンテナを必要に応じて注入し、その後、サービスとしてあなたのMenuクラスを作成する必要がありますが、あなただけの[doctrine.orm.entity_manager @]必要xmlファイル:

<service id="app.menu_builder" class="AppBundle\Menu\MenuBuilder"> 
    <argument type="service" id="knp_menu.factory"/> 
    <argument type="service" id="doctrine.orm.entity_manager"/> 
</service> 

あなたのMenuBuilderクラスに入れる:

public function __construct(FactoryInterface $factory,EntityManager $entityManager) { 
    $this->factory = $factory; 
    $this->em = $entityManager; 
} 
関連する問題