Yii Framework Forum: При update не срабатывает валидатор - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

При update не срабатывает валидатор Rate Topic: -----

#1 User is offline   patison 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 26-April 09

Posted 15 October 2009 - 12:15 PM

Проблема следующая:
Имеется модель User и CRUD в ней.
Задал для полей username и password в rules быть обязательными
array('username, password', 'required'),

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

#2 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 15 October 2009 - 01:16 PM

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

Делай:
if ($form->validate('название_сценария')) {
  $form->update();
} else {
  // ошибка валидации. 
}

0

#3 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 15 October 2009 - 01:18 PM

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

Quote

Updates the row represented by this active record. All loaded attributes will be saved to the database. Note, validation is not performed in this method. You may call validate to perform the validation.


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

#4 User is offline   rosko 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 211
  • Joined: 04-January 09
  • Location:Kiev, Ukraine

Posted 15 October 2009 - 03:16 PM

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

#5 User is offline   patison 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 26-April 09

Posted 15 October 2009 - 05:59 PM

View Postrosko, on 15 October 2009 - 03:16 PM, said:

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

Вместо validate?
0

#6 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 16 October 2009 - 12:44 AM

View Postpatison, on 15 October 2009 - 05:59 PM, said:

Вместо 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()

0

#7 User is offline   patison 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 26-April 09

Posted 18 October 2009 - 10:44 AM

не совсем понятно куда именно это дело засовывать... :(
Имеется у меня в контроллере 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));
}

0

#8 User is offline   rosko 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 211
  • Joined: 04-January 09
  • Location:Kiev, Ukraine

Posted 18 October 2009 - 01:32 PM

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

#9 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 18 October 2009 - 02:37 PM

Уву, либо:

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

0

#10 User is offline   patison 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 26-April 09

Posted 19 October 2009 - 06:04 PM

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

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users