0
  • 我有一个“用户”表,其中包含许多字段,例如用户名、姓名、电子邮件、密码、性别、生日、头像等。我已经使用InputFilter在我的 ZF2 应用程序的用户模型中描述了所有这些字段。

问题如下: - 我有一些表单,如主要设置(只有姓名、性别和生日字段),我想通过这个表单只编辑数据库中的这三个字段(并分别编辑其他字段,如网站其他页面中其他形式的密码和电子邮件)。但是,它似乎不起作用:

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

        if ($form->isValid()) {
            $users->exchangeArray($form->getData());
            $this->getUsersTable()->editUser($users, $userInfo->user_id);
            $message = 'Профилът ви беше успешно променен!';
        }
    }

这是我只想更新字段name、birthday 和 sex的表单。

这是模型:

public function editUser(Users $user, $userID) {
    $data = array(
        'name' => $user->name,
        'birthday' => $user->birthday,
        'sex' => $user->sex,
    );

    $this->tableGateway->update($data, array('user_id' => $userID));
}

$form->getMessages() 返回一个空数组,而 var_dump($form->isValid) 返回布尔值 false。如果我删除 InputFilter 中的所有其他 MySQL 字段和过滤器,并且只保留模型中的三个字段(姓名、生日和性别),则一切正常,并且表单验证有效。但是当我在模型中描述“用户”表的所有其他字段时,它没有。希望我解释得很好。有任何想法吗?

4

1 回答 1

3

当您只想保存部分数据时,您可以使用验证组仅验证某些字段:

http://framework.zend.com/manual/2.0/en/modules/zend.form.quick-start.html#validation-groups

例如:

$form->setValidationGroup('name', 'sex', 'birthday');
$form->setData($data);
if ($form->isValid()) {
    // Contains only the "name", "sex", "birthday"
    $data = $form->getData();
}
于 2013-03-06T11:53:53.617 回答