一开始,我使用了存储库。
但是,在github上进行一些代码审查之后,我很有兴趣使用ObjectManager(以减轻控制器,以及好奇心^^)。
问题是我没有看到一些关于它的好教程。甚至我看到的教程是由对象管理器初始化服务,但不是创建一个。
在FriendsOfSymfony github中,我们可以看到一个例子,但我真的不明白如何初始化服务。当我初始化我的经理服务时,我有这个错误“无法实例化接口Doctrine \ Common \ Persistence \ ObjectManager”:
<?xml version="1.0" ?>
http://symfony.com/schema/dic/services/services-1.0.xsd“&GT;
<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 :(得分: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\EntityManager
和Doctrine\ORM\EntityManagerInterface
,它可能对您有帮助。