Yii2 проверка на уникальность сочетания полей

Как то мне понадобилось сделать такую валидацию, что бы уникальными были не поля по отдельности, а комбинация полей.

Когда в контролер приходят данные из формы с ними надо что-то сделать — загрузить в соответствующую модель, проверить на валидность, как-нибудь так:

$model->load(Yii::$app->request->post()); 
$model->validate();

Важное замечание: при этом в модель загружаются только те поля (так называемые безопасные), для которых указаны валидация.

При создании в Yii форм, с наследованием от класса Model ( use yii\base\Model), правила валидации задаются функцией rules:

public $field1;
public $field2;

public function rules()
{
    return [
        [['field1', 'field2'], 'required'],
        [['field1'], 'unique', 'targetAttribute' => ['field1', 'field12']]
    ];
}

в виде массива [[‘поле1’, ‘поле2’], ‘название валидатора’, параметры(опционально)]

В приведенном выше примере поля field1 и field2  — обязательны для заполнения, а поле field1 должно быть уникальным для данного field2.

(документация по валидатору unique)

Кроме встроенных валидаторов (соответствие различным типам переменных, проверка на изображение, файл, url, email и т.д.), есть возможность писать свои. Например:

public $field1;

public function rules()
{
    return [
        [['field1'], 'field1Validator', $params],
    ];
}

public function filterValidator($attr, $params) {
    // проверка атрибута по произвольным правилам
    // если он не прошел проверку, то к данному атрибуту добавляется ошибка:
    $this->addError($attr, 'invalid, because...');
}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code