Is there a better way to bind data from a doctrine2 ODM entity class to a Zend2 form besides using bind()
?
If so, what would it be? Would I just retrieve the data as an array and pass each individual field? I am struggling with this and most likely making it harder than it needs to be.
When I call the bind()
function it outputs a Zend error referencing the default hydrator. Do I need to do something special in my entity class?
Edit: Here are the exact errors Zend is throwing
~\vendor\zendframework\zendframework\library\Zend\Stdlib\Hydrator\ArraySerializable.php:35
Zend\Stdlib\Hydrator\ArraySerializable::extract expects the provided object to implement getArrayCopy()
They make me think I need to either:
For Zend\Form being able to hydrating your entity you need to have something like that in your entity class:
public function getArrayCopy()
{
return get_object_vars($this);
}
in you .../Model/XXXXTable.php
define a function want to get a record.
$id = (int)$id;
$row = $this->tableGateway->select(array('id'=>$id));
$row = $row->current(); //this line is very important
I use the following code at module.config.php to use doctrine hydrator
$form = new ...;
$dm = $sm->get('doctrine.documentmanager.odm_default');
$form->setHydrator(new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($dm));
return $form;
I use the populate method in my entity class. something like this
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;
}
and then in controller you can use populate function something like this.
$user = new User();
$request = $this->getRequest();
$user->populate($request->getPost());
I am not sure if I understand your quesiton correctly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With