0
  • ユーザー名、名前、電子メール、パスワード、性別、誕生日、アバターなどの多くのフィールドを持つ「users」テーブルがあります。ZF2 アプリケーションの Users モデルでInputFilterを使用してそれらすべてを記述しました。

問題は次のとおりです: - メイン設定のようないくつかのフォーム (名前、性別、誕生日のフィールドのみ) があり、このフォームを介してデータベース内のこれら 3 つのフィールドのみを編集したい (それぞれ次のような他のフィールドを編集したい)サイトの他のページの他の形式のパスワードと電子メール)。ただし、うまくいかないようです:

$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 フィールドとフィルターを削除し、モデル内の 3 つのフィールド (名前、誕生日、性別) のみを保持すると、すべて問題なく、フォームの検証が機能します。しかし、モデルの「users」テーブルの他のすべてのフィールドを記述すると、そうではありません。うまく説明できれば幸いです。何か案は?

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 に答える