Zend Framework 2 InputFilter和表单字段

时间:2013-03-06 11:31:24

标签: database forms zend-framework2

  • 我有一个'用户'表,其中包含许多字段,如用户名,姓名,电子邮件,密码,性别,生日,头像等。我已使用 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 = 'Профилът ви беше успешно променен!';
        }
    }

以下是我只想更新字段名称,生日和性别的表单。

以下是模型:

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字段和过滤器,并且我只保留模型中的三个字段(名称,生日和性别),那么一切正常并且表单验证有效。但是当我描述模型中“用户”表的所有其他字段时,它却没有。希望我解释得很好。有什么想法吗?

1 个答案:

答案 0 :(得分: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();
}