2016-09-20 45 views
0

開始時,我使用了存儲庫。如何用Symfony2創建ObjectManager服務?

但是,在github上的一些代碼評論後,我很有趣地使用ObjectManager(以減輕控制器,並且好奇心^^)。

問題是我沒有看到一些關於它的好教程。即使我看到的教程是由對象管理器初始化服務,但不創建一個。

在FriendsOfSymfony github中,我們可以看到一個例子,但我並不真正瞭解如何初始化服務。我有這樣的錯誤「無法實例接口主義\ COMMON \持久性\的ObjectManager」當我初始化我的經理服務是這樣的:

<?xml version="1.0" ?> 

http://symfony.com/schema/dic/services/services-1.0。 XSD「>

<parameters> 
    <parameter key="md_mechanical.entity.enginemanager.class">MD\MechanicalBundle\Entity\EngineManager</parameter> 
</parameters> 

<services> 
    <service id="md_mechanical.enginemanager.default" class="%md_mechanical.entity.enginemanager.class%"> 
     <argument type="service" id="md_mechanical.object_manager" /> 
     <argument>%md_engine.engine.class%</argument> 
    </service> 

    <!-- The factory is configured in the DI extension class to support more Symfony versions --> 
    <service id="md_mechanical.object_manager" class="Doctrine\Common\Persistence\ObjectManager"> 
     <argument>%fos_user.model_manager_name%</argument> 
    </service> 
</services> 

在此先感謝您的幫助

回答

0

Cannot instantiate interface Doctrine\Common\Persistence\ObjectManager意味着你試圖實例化一個接口,這是不可能的。

你必須創建一個實現此接口的對象,並定義的所有功能

use Doctrine\Common\Persistence\ObjectManager as ObjectManager; 

class MyObjectManager implements ObjectManager 
{ 
    public function __construct(/* some params here */) 
    { 
     // Construct your manager here 
    } 

    public function find($className, $id) 
    { 
     // Do stuff 
    } 

    public function persist($object) 
    { 
     // Do stuff 
    } 

    public function remove($object) 
    { 
     // Do stuff 
    } 

    public function merge($object) 
    { 
     // Do stuff 
    } 

    public function clear($objectName = null) 
    { 
     // Do stuff 
    } 

    public function detach($object) 
    { 
     // Do stuff 
    } 

    public function refresh($object) 
    { 
     // Do stuff 
    } 

    public function flush() 
    { 
     // Do stuff 
    } 

    public function getRepository($className) 
    { 
     // Do stuff 
    } 

    public function getClassMetadata($className) 
    { 
     // Do stuff 
    } 

    public function getMetadataFactory() 
    { 
     // Do stuff 
    } 

    public function initializeObject($obj) 
    { 
     // Do stuff 
    } 

    public function contains($object) 
    { 
     // Do stuff 
    } 
} 

然後宣佈它作爲一個服務

<services> 
    <service id="myObjectManager" class="%myObjectManager.class%"> 
     <argument>...</argument> 
    </service> 

    # Use your brand new object manager 
    <service id="md_mechanical.enginemanager.default" class="%md_mechanical.entity.enginemanager.class%"> 
     <argument type="service" id="myObjectManager" /> 
     <argument>%md_engine.engine.class%</argument> 
    </service> 
</services> 

你應該Doctrine\ORM\EntityManagerDoctrine\ORM\EntityManagerInterface有一看,可以幫助你。