Zend 3. $form->bind($book) вызывает ошибку must be an instance of Zend\Hydrator\object, instance of Application\Model\Book given
При вызове функции $form->bind($book) получаю ошибку
Добавил в Book.php метод getArrayCopy() вроде должно всё работать но не работает
уже долго мучаюсь чтобы найти решение
HEEEEELP
E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-hydrator\src\ArraySerializableHydrator.php:27
Argument 1 passed to Zend\Hydrator\ArraySerializableHydrator::extract() must be an instance of Zend\Hydrator\object, instance of Application\Model\Book given, called in E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-form\src\Fieldset.php on line 650
#0 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-form\src\Fieldset.php(650): Zend\Hydrator\ArraySerializableHydrator->extract(Object(Application\Model\Book))
#1 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-form\src\Form.php(968): Zend\Form\Fieldset->extract()
#2 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-form\src\Form.php(303): Zend\Form\Form->extract()
#3 E:\Doniyor\phpStorm\igs.kg\module\Application\src\Controller\BookController.php(77): Zend\Form\Form->bind(Object(Application\Model\Book))
#4 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-mvc\src\Controller\AbstractActionController.php(78): Application\Controller\BookController->editAction()
#5 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-eventmanager\src\EventManager.php(322): Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
#6 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-eventmanager\src\EventManager.php(179): Zend\EventManager\EventManager->triggerListeners(Object(Zend\Mvc\MvcEvent), Object(Closure))
#7 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-mvc\src\Controller\AbstractController.php(106): Zend\EventManager\EventManager->triggerEventUntil(Object(Closure), Object(Zend\Mvc\MvcEvent))
#8 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-mvc\src\DispatchListener.php(138): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))
#9 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-eventmanager\src\EventManager.php(322): Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
#10 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-eventmanager\src\EventManager.php(179): Zend\EventManager\EventManager->triggerListeners(Object(Zend\Mvc\MvcEvent), Object(Closure))
#11 E:\Doniyor\phpStorm\igs.kg\vendor\zendframework\zend-mvc\src\Application.php(332): Zend\EventManager\EventManager->triggerEventUntil(Object(Closure), Object(Zend\Mvc\MvcEvent))
#12 E:\Doniyor\phpStorm\igs.kg\public\index.php(40): Zend\Mvc\Application->run()
#13 {main}
BookController.php
/* остальной код */
public function editAction()
{
$id = (int) $this->params()->fromRoute('id', 0);
if (0 === $id) {
return $this->redirect()->toRoute('book', ['action' => 'add']);
}
try {
$book = $this->table->getBook($id);
} catch (\Exception $e) {
return $this->redirect()->toRoute('album', ['action' => 'index']);
}
$form = new BookForm();
$form->bind($book);
$form->get('submit')->setAttribute('value', 'Edit');
$request = $this->getRequest();
$viewData = ['id' => $id, 'form' => $form, 'template' => 'add'];
if (! $request->isPost()) {
return $viewData;
}
$form->setInputFilter($book->getInputFilter());
$form->setData($request->getPost());
if (! $form->isValid()) {
return $viewData;
}
$this->table->saveBook($book);
// Redirect to album list
return $this->redirect()->toRoute('book', ['action' => 'index']);
}
/* остальной код */
Book.php
class Book implements InputFilterAwareInterface
{
public $id;
public $name;
private $quantity;
private $inRent;
private $inputFilter;
public function exchangeArray(array $data)
{
$this->id = !empty($data['id']) ? $data['id'] : null;
$this->name = !empty($data['name']) ? $data['name'] : null;
$this->quantity = $data['quantity'];
$this->inRent = $data['in_rent'];
}
public function getArrayCopy()
{
return [
'id' => $this->id,
'name' => $this->name,
'quantity' => $this->quantity,
'in_rent' => $this->inRent,
];
}
}
BookTable.php
class BookTable
{
/* остальной код */
public function getBook($id)
{
$id = (int)$id;
$rowset = $this->tableGateway->select(['id' => $id]);
$row = $rowset->current();
if (!$row) {
throw new RuntimeException(sprintf(
'Could not find row with identifier %d',
$id
));
}
return $row;
}
/* остальной код */
}