Zend framework2 从doctrine2 ODM绑定Zend2表单数据
除了使用Zend framework2 从doctrine2 ODM绑定Zend2表单数据,zend-framework2,doctrine-odm,Zend Framework2,Doctrine Odm,除了使用bind(),还有更好的方法将数据从doctrine2odm实体类绑定到Zend2表单吗 如果是,会是什么?我是否将数据作为数组检索并传递每个字段?我正在努力解决这个问题,很可能会让事情变得更加困难 当我调用bind()函数时,它会输出一个Zend错误,引用默认值。我需要在实体类中做一些特殊的事情吗 编辑:下面是Zend抛出的确切错误 ~\vendor\zendframework\zendframework\library\Zend\Stdlib\Hydrator\arrayseriza
bind()
,还有更好的方法将数据从doctrine2odm实体类绑定到Zend2表单吗
如果是,会是什么?我是否将数据作为数组检索并传递每个字段?我正在努力解决这个问题,很可能会让事情变得更加困难
当我调用bind()
函数时,它会输出一个Zend错误,引用默认值。我需要在实体类中做一些特殊的事情吗
编辑:下面是Zend抛出的确切错误
~\vendor\zendframework\zendframework\library\Zend\Stdlib\Hydrator\arrayserizable.php:35
Zend\Stdlib\Hydrator\ArraySerializable::extract需要提供
对象以实现getArrayCopy()
他们让我觉得我需要:
我在实体类中使用populate方法。 像这样的
public function populate($data = array())
{
$this->id = ( isset($data['id'])) ? $data['id'] : null;
$this->username = (isset($data['username'])) ? $data['username'] : null;
$this->pass = (isset($data['pass'])) ? $data['pass'] : null;
}
然后在控制器中,你们可以使用像这样的填充函数
$user = new User();
$request = $this->getRequest();
$user->populate($request->getPost());
我不确定我是否正确理解了你的问题 幸运的是,如果您遵循本教程,您的实体中不需要更多内容: 我使用几乎相同的方法,而且(几乎)效果很好。你应该关心两件事: 1.)确保验证表中的所有数据(或至少非空数据),因为只有经过验证的字段才会发送到数据库。这是这个博客的作者对我说的。:) 2.)为编辑表单创建视图时,将id添加到管线:
$form->setAttribute('action', $this->url('post',
array('action'=>'add', 'id'=>"$this->id")))->prepare();
祝你好运 为了让Zend\Form能够为你的实体补水,你需要在实体类中有类似的东西:
public function getArrayCopy()
{
return get_object_vars($this);
}
在您的…/Model/xxtable.php中
定义要获取记录的函数
$id = (int)$id;
$row = $this->tableGateway->select(array('id'=>$id));
$row = $row->current(); //this line is very important
我使用module.config.php中的以下代码来使用
$form = new ...;
$dm = $sm->get('doctrine.documentmanager.odm_default');
$form->setHydrator(new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($dm));
return $form;
请修改您的问题以包含实际错误消息。ZF2的工作方式是将对象/实体绑定到表单,然后指定的对象或实体确保引用的表单字段正确映射。这实际上是一个非常简单的用例,并且很好地分离了关注点,正如错误消息所给出的那样,您总是知道应该在哪里查找。显然,我希望用户能够编辑他们已经发布的信息。我做了一些研究,发现Zend使用bind()方法从实体中提取数据并填充表单进行编辑。目前我正在做一些类似$form=newform()的事情$表单->绑定($entity)。我的$实体使用docterne2的getServiceLocator(),我使用getQueryBuilder()构建了一个查询。当我导航到我的editAction时,我得到以下错误Zend\Stdlib\Hydrator\ArraySerializable::extract期望提供的对象实现getArrayCopy(),get\u object\u vars函数对此很感兴趣。Reference:-“根据作用域获取给定对象的可访问非静态属性。”为了更清楚,我们将上述方法添加到此文件:
\zf2 tutorial\module\Album\src\Album\Model\Album.php
。