При update не срабатывает валидатор

Проблема следующая:

Имеется модель User и CRUD в ней.

Задал для полей username и password в rules быть обязательными




array('username, password', 'required'),



Однако когда я делаю Update пользователя, если я не ввожу ничего в поле password он это дело пропускает, и сохраняет пользователя с пустым паролем.

Могу предположить что это дело всё не проходит validation. Что с этим делать?

И не должен вроде как.

Делай:




if ($form->validate('название_сценария')) {

  $form->update();

} else {

  // ошибка валидации. 

}



В подтверждение моим словам, кусок из API по данному методу:

Что нам говорит о том что метод валидации в данном случае не срабатывает. Что бы он срабатывал - вы можете специально для этого вызвать validate()

Да, Zolter прав. Добавлю только, что можно вызывать save()

Вместо validate?

Вместо update()

Метод save() работает таким образом что смотрит, если в переменной заполненно поле первичного клюуча (id к примеру) - значит при вызове метода save() делается обновление записи, если поле первичного ключа пустое - значит происходит insert(). Т.е. автоматически вызывается метод согласно тому что я описал.

Плюсом этого является то что валидация пройдет так же автоматически




$form = new TestModel();

$form->name = "Newname";

$form->save(); // т.к. id не указан, будет вызван $form->insert






$form = new TestModel();

$form->id = 33;

$form->name = "Newname";

$form->save(); // т.к. id указан, будет выполнен update()



не совсем понятно куда именно это дело засовывать… :(

Имеется у меня в контроллере 2 экшна - actionCreate и actionUpdate. Предположил что именно в actionUpdate надо проводить валидацию. Код экшна такой:


	

public function actionUpdate()

{

	$model=$this->loadUser();

	if(isset($_POST['User']))

	{

               $model->attributes=$_POST['User'];

               if($model->save())

                   $this->redirect(array('show','id'=>$model->id));

      }

	$this->render('update',array('model'=>$model));

}



Ну, собственно так. $model->save() автоматически проводит валидацию.

Уву, либо:


public function actionUpdate()

{

        $model=$this->loadUser();

        if(isset($_POST['User']))

        {

               $model->attributes=$_POST['User'];

               if($model->validate()) {

                   $model->update();

                   $this->redirect(array('show','id'=>$model->id));

               }

      }

        $this->render('update',array('model'=>$model));

}

Вроде работает, спасибо!

Намудрил там немного во views… не передавало как надо один из важных параметров формы при постинге.