我希望能够在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