Zend的\ STDLIB \异常\ BadMethodCallException

时间:2017-07-12 16:11:24

标签: object exception zend-framework

这里是我遇到问题的堆栈跟踪部分:

的Zend \ STDLIB \异常\ 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.php(631):Zend \ Stdlib \ Hydrator \ ArraySerializable-> extract(Object(BookList \ Model \)书))

1 /var/www/html/zf2/vendor/zendframework/zendframework/library/Zend/Form/Form.php(942):Zend \ Form \ Fieldset-> extract()

2 /var/www/html/zf2/vendor/zendframework/zendframework/library/Zend/Form/Form.php(303):Zend \ Form \ Form-> extract()

3 /var/www/html/zf2/module/BookList/src/BookList/Controller/BookController.php(59):Zend \ Form \ Form-&gt; bind(Object(BookList \ Model \ Book))< / H1>

我的Controller中调用bind的操作方法:

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] =&gt; 5 [作者] =&gt; Gotye [title] =&gt;制作镜子[inputFilter:protected] =&gt;)

所以这是一个正确的对象,为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

如何返回结果,通常在构建模型时告诉ResultSet对象。你实际上在那里设置原型来返回结果集,嘿! “使用此原型”,在您的情况下,Book模型。它确实有一个名为getArrayCopy()的方法,它缺失了。在这种情况下,实际上会出现错误。所以请将此添加到Book模型

class Book 
{
    // other properties and methods should be here

    // add this method here
    public function getArrayCopy()
    {
        return get_object_vars($this);
    }
}