3

我希望能够在开发 Symfony2 项目期间使用此处描述的 PersistentObject http://www.doctrine-project.org/blog/a-doctrine-orm-odm-base-class.html,以避免创建和在数据库和实体设计不断变化时,无休止地删除 getter 和 setter。

正如简短文档(下面的代码引用)中所建议的那样,在 Symfony2 项目中的哪个位置“配置”了 ObjectManager?它应该在控制器中,如果是,它会是什么样子?

 $entityManager = EntityManager::create(...);
 PersistentObject::setObjectManager($entityManager);

我找不到任何工作示例(尽管我确实在 stackoverflow 上找到了 Zend2 框架的类似示例:Using PersistentObject from Doctrine in Zend Framework

谢谢你的时间!

4

1 回答 1

1

PersistentObject是您不必手动保留的对象。因此,它使用 php 的方法提供了神奇的 getter 和 setter 。__call()

您只需在实体类中扩展 Object 并在控制器中使用它。无需生成 getter 和 setter。

示例实体

<?php
namespace Vendor\YourBundle\YourEntity;

use Doctrine\Common\Persistence\PersistentObject; 
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\ORM\Mapping as ORM;

class YourEntity extends PersistentObject
{

   // i added the constructor in order to save the setObjectManager() 
   // call in the the controller

   public function __construct(ObjectManager $om)
   {
       $this->setObjectManager($om);
   }

   /** 
    * @ORM\Id  
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
   protected $id;

   /**
    * @ORM\Column(type="string", length=100)
    */
   protected $name;

   // ... more properties

}

示例控制器动作

class YourController extends Controller
{
    public function yourAction($name)
    {
        $em = $this->get('doctrine')->getManager('default');

        $entity = new YourEntity($em);   // __construct calls setObjectManager($em)

        $entity->setName($name);         // magic setter is used here

        // ... no need for $em->persist($entity);

        $em->flush();                    // $entity is being persisted.
    }

    // ...

您可以使用以下方法之一在 symfony 控制器中获取学说实体管理器...

 $em = $this->get('doctrine')->getManager();          // gets default manager
 $em = $this->get('doctrine')->getManager('default'); // same as above
 $em = $this->getDoctrine()->getManager();            // using alias 
于 2013-06-13T20:57:08.200 回答