Object Zend\Stdlib\Exception\BadMethodCallException
这里是stacktrace中我遇到问题的部分: Zend\Stdlib\Exception\BadMethodCallException 文件: /var/www/html/zf2/vendor/zendframework/zendframework/library/Zend/Stdlib/Hydrator/ArraySerializable.php:28 信息: Zend\Stdlib\Hydrator\ArraySerializable::extract期望提供的对象实现getArrayCopy 堆栈跟踪: 0/var/www/html/zf2/vendor/zendframework/zendframework/library/Zend/Form/Fieldset.php631:Zend\Stdlib\Hydrator\arrayserizable->extractObjectBookList\Model\Book 1/var/www/html/zf2/vendor/zendframework/zendframework/library/Zend/Form/Form.php942:Zend\Form\Fieldset->extract 2/var/www/html/zf2/vendor/zendframework/zendframework/library/Zend/Form/Form.php303:Zend\Form\Form->extract 3/var/www/html/zf2/module/BookList/src/BookList/Controller/BookController.php59:Zend\Form\Form->bindObjectBookList\Model\Book 我的控制器中调用绑定的操作方法:Object Zend\Stdlib\Exception\BadMethodCallException,object,exception,zend-framework,Object,Exception,Zend Framework,这里是stacktrace中我遇到问题的部分: Zend\Stdlib\Exception\BadMethodCallException 文件: /var/www/html/zf2/vendor/zendframework/zendframework/library/Zend/Stdlib/Hydrator/ArraySerializable.php:28 信息: Zend\Stdlib\Hydrator\ArraySerializable::extract期望提供的对象实现getArrayCo
public function editAction()
{
$id = (int) $this->params()->fromRoute('id', 0);
if (!$id) {
return $this->redirect()->toRoute('book');
}
try {
$book = $this->getBookTable()->getBook($id);
}
catch (\Exception $ex) {
return $this->redirect()->toRoute('book', array(
'action' => 'index'
));
}
$form = new BookForm();
$form->bind($book); // this is the line 59 of BookController
$form->get('submit')->setAttribute('value', 'Edit');
$request = $this->getRequest();
if ($request->isPost()) {
$form->setInputFilter($book->getInputFilter());
$form->setData($request->getPost());
if ($form->isValid()) {
$this->getBookTable()->saveBook($book);
// Redirect to list of books
return $this->redirect()->toRoute('book');
}
}
return array(
'id' => $id,
'form' => $form,
);
}
我还检查了BookTable类以查看从结果集返回的对象,它是Book的一个实例
然后,我打开ArratSerializable.php并检查传递的对象,tre响应为:
BookList\Model\Book Object[id]=>5[author]=>Gotye[title]=>制作镜像[inputFilter:protected]=>
因此,它是一个正确的对象,为什么不起作用?在构建模型时,通常会将结果如何返回给ResultSet对象。实际上,您在那里设置了一个原型,用于返回结果集,并说,嘿!使用这个原型,在你的例子中,它就是书本模型。它确实有一个名为getArrayCopy的方法,但缺少该方法。在这种情况下,这实际上会引起错误。因此,请将此添加到书本模型中
class Book
{
// other properties and methods should be here
// add this method here
public function getArrayCopy()
{
return get_object_vars($this);
}
}
由于这个原因,它是extract方法中对象上的可调用函数…: