0

我在编辑专辑“SQLSTATE [23000]:完整性约束违规:1048 列'艺术家'不能为空”中收到 PDOException。我调试了代码,发现编辑表单操作运行后,所有列(id,title,artist)值在插入语句中更改为空值,而它应该是编辑表单的 POST 值。我使用与 ZF2 教程相同的代码。$request->getPost() 具有正确的编辑值,但 $form->getData() 返回 (id,title,artist) 的空表单帖子值。

有人可以帮忙吗?

我的代码是:

public function editAction()
{
    $id = (int) $this->params()->fromRoute('id', 0);
    if (!$id) {
        return $this->redirect()->toRoute('album', array(
            'action' => 'add'
        ));
    }
    $album = $this->getAlbumTable()->getAlbum($id);

    $form  = new AlbumForm();
    $form->bind($album);
    $form->get('submit')->setAttribute('value', 'Edit');

    $request = $this->getRequest();
    if ($request->isPost()) {
        $form->setInputFilter($album->getInputFilter());
        $form->setData($request->getPost());

        if ($form->isValid()) {
            $this->getAlbumTable()->saveAlbum($form->getData());

            // Redirect to list of albums
            return $this->redirect()->toRoute('album');
        }
    }

    return array(
        'id' => $id,
        'form' => $form,
    );
}
4

2 回答 2

2

根据ZF2的例子,不应该是

$this->getAlbumTable()->saveAlbum($album);

代替

$this->getAlbumTable()->saveAlbum($form->getData());

因为您已经绑定了将模型附加到表单的 $album。这基本上做了两件事

  1. 显示从具有唯一 ID 的专辑中获取的初始值
  2. 在表单验证后,数据被放回模型中。

试试我的建议

于 2013-09-09T13:17:18.737 回答
2

也许您在创建要绑定到Form对象的实体(模型对象)时遇到了同样的问题。

我犯的错误是我总是从实体的方法中提供一个新的 InputFilter 实例

获取输入过滤器();

在调用之后$form->isValid(),Zend Form 实际上正在查看是否有一个实体对象绑定到它......如果是这样,那么它会$entity->getInputFilter()在表单的$this->bindValues()方法中调用 , 并且在接收到过滤器对象后,代码将返回$filter->getValues()以填充绑定模型。由于实体总是返回新的InputFilter实例,因此值自然为空/null。

对我来说,错误是在实体(模型)中写了这样的东西:

    public function getInputFilter()
    {
        return new SomeInputFilter();
    }

但实际上,我需要编写这样的方法:

    public function getInputFilter()
    {
        if(empty($this->inputFilter)){
            $this->inputFilter = new SomeInputFilter();
        }

        return $this->inputFilter;
    }

如您所见,解决方案是设置一个受保护的属性,并且仅当它为空时才使用$inputFilter该对象的新实例填充它。InputFilter我在编码时没有彻底注意文档,并且在尝试插入记录时遇到了与您相同的问题(绑定模型中的空数据)。

希望您会发现这很有用,但如果没有,我很抱歉浪费您阅读本文的时间。:)

PS:感谢您阅读我的回答,我知道我对该主题的响应有点晚了,但是我最近开始使用 Zend 2 Framework,并且遇到了类似的问题,所以我尝试分享我的2 美分,希望在可能的情况下以某种方式提供帮助。

于 2016-06-27T20:09:08.837 回答