В модели есть методы: beforeValidate() и beforeSave()
здорово, получилось.
как теперь пометить некорректные данные ошибкой и
вывести на экран вместе с формой ввода?
в модели есть типа $this->addError('password','Incorrect password.') .
как после валидации даных в конролере вывести ERROR и форму ввода?
Это можно сделать в представлении:
<?php echo CHtml::errorSummary($model); ?>
Попробуйте сгенерировать crud для своей модели в консольной утилите yiic, проанализируйте представления, посмотрите как это рекомендует делать автор фреймворка.
$rec->save; //тут срабатывает beforeValidate() модели
if($rec->hasErrors()) {
//вызвать представление и передать туда ошибку $this->render('form',array('errorSummary'=>CHtml::errorSummary($rec),'row'=>$_POST['News']));
return;
}
$this->redirect(array('edit','id'=>$rec->id);
}
$this->render('form');
}[/tt]
3. в представлении
[tt] if (isset($errorSummary)) {
echo $errorSummary;
}[/tt]
Зачем плохому людей учишь? Вот намного проще и идеологически правильней:
1. В модели:
public function rules()
{
return array(
...
array('dat','yourDataValidator'),
...
);
}
public function yourDataValidator()
{
//Здесь пишем код валидатора даты
}
А вообще есть CTypeValidator, в котором type может принимать значение date с настраиваемым форматом, так что можно даже свой валидатор не писать, а ограничиться использованием того что идет в комплекте с фреймворком.
2. В контроллере:
public function actionAdd()
{
$new=new New;
if(isset($_POST['New']))
{
$new->attributes=$_POST['New'];
if($new->save()) //ВОТ ТУТ ВАЛИДАЦИЯ, проверка $new->hasErrors() была бы лишней
$this->redirect(array('show','id'=>$new->id));
}
$this->render('create',array(
'new'=>$new,
));
}
3. В представлении:
<?php echo CHtml::errorSummary($new); ?> //В случае если есть ошибки они все тут выведутся, и не нужно вызывать в представлении условие и передавать туда лишнюю переменную $errorSummary
P.S. Метод beforeValidate в модели вообще то не для валидации предназначен. А для работы с датой есть компонент CDateFormatter, вызывается Yii::app()->dateFormatter. Он подключается фреймворком по умолчанию, а поэтому грех его не использовать
P.S. Метод beforeValidate в модели вообще то не для валидации предназначен. А для работы с датой есть компонент CDateFormatter, вызывается Yii::app()->dateFormatter. Он подключается фреймворком по умолчанию, а поэтому грех его не использовать
мне не надо переделать дату в локальный языковый формат, а надо