Symfony2 のサンプルでは、Controller クラスから mongodb にアクセスする方法を見つけることができます。
$dm=$this->get('doctrine_mongodb')->getManager();
任意のクラスでそれを行う方法は?
このようにクラスにサービスを注入するには、依存性注入を使用する必要があります。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();
}