2013-03-06 2 views
0
  • У меня есть таблица пользователей со многими полями, такими как имя пользователя, имя, адрес электронной почты, пароль, пол, день рождения, аватар и т. Д. Я описал их все в модели Users мое приложение ZF2, используя InputFilter.

Проблема заключается в следующем: - У меня есть несколько форм, как основные настройки (только имя, пол и день рождения полей), и я хотел бы изменить только эти три поля в базе данных с помощью этой формы (и соответственно редактировать другие поля, такие как пароль и электронная почта в других формах на других страницах сайта). Однако, это не похоже на работу:Zend Framework 2 InputFilter и поля формы

$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)); 
} 

$ форм-> GetMessages() возвращает пустой массив и var_dump ($ form-> IsValid) возвращает логическое значение ложь. Если я удалю все другие поля и фильтры MySQL в InputFilter, и я сохраняю только три поля (имя, день рождения и пол) в модели, все в порядке, и валидация формы работает. Но когда я описываю все остальные поля таблицы «users» в модели, это не так. Надеюсь, я объяснил это хорошо. Есть идеи?

ответ

3

Вы можете использовать Validation группы только проверяет некоторые поля, когда вы только хотите сохранить парциальное данные:

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(); 
} 
+0

Спасибо, приятель! Ты просто спас мою задницу! –

Смежные вопросы