【问题标题】:Zend\Stdlib\Exception\BadMethodCallExceptionZend\Stdlib\Exception\BadMethodCallException
【发布时间】:2017-07-12 16:11:23
【问题描述】:

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

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.php(631): Zend\Stdlib\Hydrator\ArraySerializable->extract(Object(BookList\Model\Book ))

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->bind(Object(BookList\Model\Book)) H1>

我的控制器中调用绑定的操作方法:

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] => Making Mirrors [inputFilter:protected] =>)

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

【问题讨论】:

    标签: object exception zend-framework


    【解决方案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);
        }
    }  
    

    【讨论】:

    • 因此它是 extract 方法中对象的可调用... :)
    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多