0

Symfony2 のサンプルでは、​​Controller クラスから mongodb にアクセスする方法を見つけることができます。

$dm=$this->get('doctrine_mongodb')->getManager();

任意のクラスでそれを行う方法は?

4

1 に答える 1

2

このようにクラスにサービスを注入するには、依存性注入を使用する必要があります。doctrine_mongodb

次のようにクラスを作成します。

use Doctrine\Common\Persistence\ObjectManager;

class MyClass 
{
    protected $documentManager;

    // ObjectManager is the interface used only for type-hinting here
    // DocumentManager or EntityManager are the actual implementations
    public function __construct(ObjectManager $om)
    {
        // The property $documentManager is now set to the DocumentManager
        $this->documentManager=$om;
    }

    public function findSomething()
    {
        // now do something with the DocumentManager
        return $this->documentManager->getRepository('YourBundle:SomeDocument')->findBy(array(/* ... */));
        // ...
    }

次に、このクラスをサービスとして宣言します。

# app/config/config.yml
services:
    your_service_name:
        class:     Namespace\Your\SomeClass
        arguments: ['@doctrine.odm.mongodb.document_manager']

コントローラーからクラスにアクセスするには、サービス名を使用してコンテナーからクラスを取得します (その後、DocumentManager がコンストラクターに自動的に挿入されます)。

// Vendor/YourBundle/Controller/SomeController.php

public function doWhatever()
{
    $myClassService = $this->get('your_service_name');
    $something = $myClassService->findSomething();
}
于 2013-10-25T21:16:09.053 に答える