Doctrine orm 如何为ZF2中的ORM实体创建神奇的geter和setter?
你好,我是ZendFrame工作的新手。。。我已经按照一些基本教程使用orm构建模块。。我已经成功地完成了所有教程 我现在尝试的是使用如下神奇的getter和setter创建实体,而不是为实体类的每个属性编码所有getter和setter:Doctrine orm 如何为ZF2中的ORM实体创建神奇的geter和setter?,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,你好,我是ZendFrame工作的新手。。。我已经按照一些基本教程使用orm构建模块。。我已经成功地完成了所有教程 我现在尝试的是使用如下神奇的getter和setter创建实体,而不是为实体类的每个属性编码所有getter和setter: /* Magic getter to expose protected properties. * * @param string $property * @return mixed */ public functi
/* Magic getter to expose protected properties.
*
* @param string $property
* @return mixed
*/
public function __get($property) {
return $this->$property;
}
/**
* Magic setter to save protected properties.
*
* @param string $property
* @param mixed $value
*/
public function __set($property, $value) {
$this->$property = $value;
}
这是我在控制器中处理表单的方式:
$user = new User();
$builder = new DoctrineAnnotationBuilder($entityManager);
$form = $builder->createForm($user);
$form->setHydrator(new DoctrineHydrator($entityManager,'Module/Entity/User'));
$form->bind($user);
if($this->getRequest()->isPost())
{
$form->setData($this->getRequest()->getPost());
if($form->isValid()) {
$u = $form->getData();
var_dump($u);exit();
}
}
当我提交数据正确的表单时,表单提交时没有任何错误,但表单中用户对象的属性为空:
object(Module\Entity\User)[272]
private 'id' => null
private 'firstname' => null
private 'lastname' => null
private 'email' => null
private 'password' => null
private 'rdate' => null
private 'role' => null
这可能是因为表单对象只依赖于绑定到它的对象类的getter和setter。。。。但我不确定…:(
是否有任何解决方案可供magic Getter和Setter使用zend forms???首先,这与zend Framework 2无关。DoctrineObject水合器负责水合对象 其次,您错误地实例化了对象。如果您查看,第二个参数是一个布尔值,指示是否应该使用实体的公共API(getter/setter方法) 因为您传递了一个字符串,所以它的计算结果总是true,这指示使用者实际使用getter和setter方法,并且因为这些方法不存在,所以不会调用它们 如果希望绕过任何类逻辑,只从具有反射的对象获取/设置值,则应以这种方式实例化对象:
$form->setHydrator(新的DoctrineHydrator($entityManager,false));
然而,在OOP世界中,这是一个可怕的想法-绕过逻辑,使用神奇的方法。初学者倾向于创建这样的快捷方式。请遵循一些关于如何创建的好教程,因为我不打算在这里介绍这些主题。首先,这与Zend Framework 2无关。DoctrineObject hydrator负责为反对 其次,您错误地实例化了对象。如果您查看,第二个参数是一个布尔值,指示是否应该使用实体的公共API(getter/setter方法) 因为您传递了一个字符串,所以它的计算结果总是true,这指示使用者实际使用getter和setter方法,并且因为这些方法不存在,所以不会调用它们 如果希望绕过任何类逻辑,只从具有反射的对象获取/设置值,则应以这种方式实例化对象:
$form->setHydrator(新的DoctrineHydrator($entityManager,false));
然而,在OOP世界中,这是一个糟糕的想法-绕过逻辑,使用神奇的方法。初学者倾向于创建这样的快捷方式。请遵循一些关于如何创建的好教程,因为我不打算在这里介绍这些主题。Thnx@mike我在下面的教程中,他们在第二个参数中传递字符串,我认为这可能是t的名称空间he class…官方教程过时了:)Thnx@mike我在跟随教程,他们在第二个参数中传递字符串,我认为这可能是类的名称空间…官方教程过时了:)