如何在Symfony2项目中配置扩展PersistentObject的Doctrine2实体?


How do I configure a Doctrine2 entity which extends PersistentObject within Symfony2 project?

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

在Symfony2项目中,一个人"配置"对象管理器,如简短文档中建议的那样(代码引用如下)?它应该在控制器中吗?如果是,它会是什么样子?

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

我找不到任何工作的例子(虽然我确实找到了这个平行的例子为Zend2框架上的stackoverflow:使用PersistentObject从原则在Zend框架

谢谢你的时间!

PersistentObject是一个不需要手动持久化的对象。因此,它使用php的__call()方法提供了魔法getter和setter

您只需在实体类中扩展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 
相关文章:
  • 没有找到相关文章