patison
(Ec Developer)
October 15, 2009, 5:15pm
1
Проблема следующая:
Имеется модель User и CRUD в ней.
Задал для полей username и password в rules быть обязательными
array('username, password', 'required'),
Однако когда я делаю Update пользователя, если я не ввожу ничего в поле password он это дело пропускает, и сохраняет пользователя с пустым паролем.
Могу предположить что это дело всё не проходит validation. Что с этим делать?
Zolter
(Zolter Od)
October 15, 2009, 6:16pm
2
И не должен вроде как.
Делай:
if ($form->validate('название_сценария')) {
$form->update();
} else {
// ошибка валидации.
}
Zolter
(Zolter Od)
October 15, 2009, 6:18pm
3
В подтверждение моим словам, кусок из API по данному методу:
Что нам говорит о том что метод валидации в данном случае не срабатывает. Что бы он срабатывал - вы можете специально для этого вызвать validate()
rosko
(A)
October 15, 2009, 8:16pm
4
Да, Zolter прав. Добавлю только, что можно вызывать save()
Zolter
(Zolter Od)
October 16, 2009, 5:44am
6
patison:
Вместо 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()
patison
(Ec Developer)
October 18, 2009, 3:44pm
7
не совсем понятно куда именно это дело засовывать…
Имеется у меня в контроллере 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));
}
rosko
(A)
October 18, 2009, 6:32pm
8
Ну, собственно так. $model->save() автоматически проводит валидацию.
Zolter
(Zolter Od)
October 18, 2009, 7:37pm
9
Уву, либо:
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));
}
patison
(Ec Developer)
October 19, 2009, 11:04pm
10
Вроде работает, спасибо!
Намудрил там немного во views… не передавало как надо один из важных параметров формы при постинге.