if ( условие ) {
Yii::$app->session->setFlash('success', 'При успешном выполнении.');
} else {
Yii::$app->session->setFlash('error', 'При ошибке в валидации.');
}
Начал делать прямо в модели, но правил валидации будет слишком много и все данные имеют запросы к базе.
Подскажите как выводить ошибки валидаци вверху формы
$form = ActiveForm::begin([
'id' => $idForm,
]);
echo $form->errorSummary($model);
public function validateDateOpen()
{
$dateToday = date("d-m-Y");//Текущая дата
//Если судья имеет категории, то проверяем на срок действия
if ( $judgeComitets = $this->idJudge->judgeComitets ) {
foreach ( $judgeComitets as $judgeComitet ) {
//Если у выбранного судьи имеется судейская категории выбранного комитета, то узнаём дату сдачи
if ( $judgeComitet->comitet_id == $this->comitet_id ) {
$dateFrom = $judgeComitet->date_from;//Считываем дату сдачи
$date = date_create($dateFrom);//Создаем дату для рассчёта срока
date_modify($date, '1 year 2 month');//Прибавляем дату к текущей
$dateToCategory = date_format($date, 'd.m.Y');//Форматируем дату
//Если срок лицензии закончился, то выводим ошибку!
if ( $dateToday>$dateToCategory ) {
$this->addError('id_judge', 'У выбранного судьи закончился срок действия судейской категории! Срок действия выбранной категории до: '.$dateToCategory.'!');
}
}
}
if ( empty($dateFrom) ) {
$this->addError('comitet_id', 'У выбранного судьи нет судейской категории выбранного комитета!');
}
}
}
public function validateMaxJugle()
{
//Посчитаем общее колличество назначений на текущее событие с учетом статуса "проверяется"
$aEventCount = Appointment::find()->where(['id_event' => $this->id_event,'status'=>'0','status'=>'1'])->count();
//Максимальное кол-во судей для назначения по текущеме рангу
$rangEvent = RangEvent::find()->where(['id' => $this->idEvent->id_rang_event])->one();
$maxJugle = $rangEvent->col_judge;
//Если назначений больше, то выдаем ошибку
if ($aEventCount > $maxJugle) {
$this->addError('id_event', 'На данное событие нельзя назначить больше '.$maxJugle.' судей!');
}
}
$this->addError('', 'У выбранного судьи нет судейской категории выбранного комитета!');$this->addErrors('У выбранного судьи нет судейской категории выбранного комитета!');
1) валидатор unique, проверяете по id или ещё по какому-то параметру.
2) валидатор range.
3) в форме не показывать тех судей, у которых срок действия категории истёк.
4) опять же, перед выводом формы проверять этот параметр и не показывать в форме.
....
Это первое, что пришло на ум, чтобы не писать кучу запросов в validator-ах.
Делайте сразу с таблицами и связями, меньше мороки будет с валидацией.
public function rules()
{
return [
[['id_event', 'comitet_id', 'id_judge'], 'required'],
[['id_event', 'comitet_id', 'id_judge', 'created_at', 'updated_at'], 'integer'],
[['status'], 'string'],
[['status'], 'default', 'value' => '0'],
[['id_event'], 'exist', 'skipOnError' => true, 'targetClass' => Event::className(), 'targetAttribute' => ['id_event' => 'id']],
[['id_judge'], 'exist', 'skipOnError' => true, 'targetClass' => Judge::className(), 'targetAttribute' => ['id_judge' => 'id']],
[['comitet_id'], 'exist', 'skipOnError' => true, 'targetClass' => Comitet::className(), 'targetAttribute' => ['comitet_id' => 'id']],
['id_event', 'validateMaxJugle'],
//['id_judge', 'validateActive'],
['id_judge', 'validateDateOpen'],
[['id_event','comitet_id', 'id_judge'], 'unique', 'targetClass' => '\backend\models\Appointment', 'targetAttribute' => ['id_event', 'comitet_id', 'id_judge'], 'message' => 'Такое назначение уже существует!'],
];
}