tutorial-core-validators.md 35.7 KB
Newer Older
Dmitry Korolev committed
1
Встроенные валидаторы
2 3
===============

Dmitry Korolev committed
4
Yii предоставляет встроенный набор часто используемых валидаторов, расположенных, в первую очередь,
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
в пространстве имен `yii\validators`. Вместо того, чтобы использовать длинные имена классов валидаторов,
вы можете использовать *псевдонимы*, чтобы указать на использование этих валидаторов.
Например, вы можете использовать псевдоним `required`, чтобы сослаться на класс [[yii\validators\RequiredValidator]]:

```php
public function rules()
{
    return [
        [['email', 'password'], 'required'],
    ];
}
```

Все поддерживаемые псевдонимы валидаторов можно увидеть в свойстве [[yii\validators\Validator::builtInValidators]].

Ниже мы опишем основные способы использования и свойства всех встроенных валидаторов.

## [[yii\validators\BooleanValidator|boolean]] <a name="boolean"></a>

```php
[
Dmitry Korolev committed
26
    // Проверяет 'selected' на равенство 0 или 1, без учета типа данных
27 28 29 30 31 32 33
    ['selected', 'boolean'],

    // Проверяет, что "deleted" - это тип данных boolean и содержит true или false
    ['deleted', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true],
]
```

Dmitry Korolev committed
34
Этот валидатор проверяет, что второе значение является *boolean*.
35 36 37

- `trueValue`: значение, соответствующее *true*. По умолчанию - `'1'`.
- `falseValue`: значение, соответствующее *false*. По умолчанию - `'0'`.
Dmitry Korolev committed
38
- `strict`: должна ли проверка учитывать соответствие типов данных `trueValue` или `falseValue`. По умолчанию - `false`.
39

Dmitry Korolev committed
40
> Примечание: Из-за того, что как правило данные, полученные из HTML-форм, представляются в виде строки, обычно вам стоит
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
оставить свойство [[yii\validators\BooleanValidator::strict|strict]] равным false.


## [[yii\captcha\CaptchaValidator|captcha]] <a name="captcha"></a>

```php
[
    ['verificationCode', 'captcha'],
]
```
Этот валидатор обычно используется вместе с [[yii\captcha\CaptchaAction]] и [[yii\captcha\Captcha]], чтобы
убедиться, что данные в инпуте соответствуют верификационному коду, отображенному с помощью виджета
[[yii\captcha\Captcha|CAPTCHA]].

- `caseSensitive`: необходимо ли учитывать чувствительность к регистру при сравнении. По умолчанию - false.
Dmitry Korolev committed
56 57
- `captchaAction`: [маршрут](structure-controllers.md#routes), соответствующий
  [[yii\captcha\CaptchaAction|CAPTCHA action]], который рендерит изображение с *CAPTCHA*. По умолчанию - `'site/captcha'`.
Dmitry Korolev committed
58 59
- `skipOnEmpty`: может ли валидация быть пропущена, если *input* пустой. По умолчанию - false,
  что означает, что *input* обязателен.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74


## [[yii\validators\CompareValidator|compare]] <a name="compare"></a>

```php
[
    // проверяет, является ли значение атрибута "password" таким же, как "password_repeat"
    ['password', 'compare'],

    // проверяет, что возраст больше или равен 30
    ['age', 'compare', 'compareValue' => 30, 'operator' => '>='],
]
```

Этот валидатор сравнивает значение указанного атрибута с другим, чтобы удостовериться, что их отношение
Dmitry Korolev committed
75
соответствует описанному в свойстве `operator`.
76 77

- `compareAttribute`: имя атрибута, с которым нужно сравнить значение. Когда валидатор используется
Dmitry Korolev committed
78
  для проверки атрибута, значением по умолчанию для этого свойства будет имя этого же атрибута
Dmitry Korolev committed
79
  с суффиксом `_repeat`. Например, если проверяющийся атрибут - `password`,
80
  то значение свойства по умолчанию будет `password_repeat`.
Dmitry Korolev committed
81
- `compareValue`: постоянное значение, с которым будут сравниваться входящие данные. Когда одновременно указаны
82
   это свойство и `compareAttribute`, это свойство получит приоритет.
Dmitry Korolev committed
83 84
- `operator`: оператор сравнения. По умолчанию `==`, что означает проверку на эквивалентность входящих данных и в
  `compareAttribute`, и в `compareValue`. Поддерживаются следующие операторы:
85
     * `==`: проверяет два значения на эквивалентность. Сравнение не учитывает тип данных.
Dmitry Korolev committed
86
     * `===`: проверяет два значения на эквивалентность. Сравнение строгое и учитывает тип данных.
87
     * `!=`: проверяет, что два значения не эквивалентны. Сравнение не учитывает тип данных.
Dmitry Korolev committed
88
     * `!==`: проверяет, что два значения не эквивалентны. Сравнение строгое и учитывает тип данных.
89 90 91 92 93 94 95 96 97 98 99 100 101
     * `>`: проверяет, что валидируемое значение больше, чем то, с которым происходит сравнение.
     * `>=`: проверяет, что валидируемое значение больше или равно тому, с которым происходит сравнение.
     * `<`: проверяет, что валидируемое значение меньше, чем то, с которым происходит сравнение.
     * `<=`: проверяет, что валидируемое значение меньше или равно тому, с которым происходит сравнение.


## [[yii\validators\DateValidator|date]] <a name="date"></a>

```php
[
    [['from', 'to'], 'date'],
]
```
Dmitry Korolev committed
102 103
Этот валидатор проверяет соответствие входящих данных форматам *date*, *time* или *datetime*.
Опционально, он может конвертировать входящее значение в UNIX timestamp и сохранить в атрибуте,
104 105
описанном здесь: [[yii\validators\DateValidator::timestampAttribute|timestampAttribute]].

Dmitry Korolev committed
106 107
- `format`: формат даты/времени, согласно которому должна быть сделана проверка. Чтобы узнать больше о формате
  строки, пожалуйста, посмотрите [руководство PHP по date_create_from_format()](http://www.php.net/manual/ru/datetime.createfromformat.php)
108
  Значением по умолчанию является `'Y-m-d'`.
yupe committed
109
- `timestampAttribute`: имя атрибута, которому этот валидатор может передать UNIX timestamp, конвертированный
Dmitry Korolev committed
110
  из строки даты/времени.
111 112 113 114 115 116


## [[yii\validators\DefaultValueValidator|default]] <a name="default"></a>

```php
[
Dmitry Korolev committed
117
    // установить null для "age" в качестве значения по умолчанию
118 119 120 121 122 123 124 125 126 127 128 129
    ['age', 'default', 'value' => null],

    // установить "USA" в качестве значения по умолчанию для "country"
    ['country', 'default', 'value' => 'USA'],

    // установить в "from" и "to" дату 3 дня и 6 дней от сегодняшней, если они пустые
    [['from', 'to'], 'default', 'value' => function ($model, $attribute) {
        return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' : '+6 days'));
    }],
]
```

Dmitry Korolev committed
130 131
Этот валидатор не проверяет данные. Вместо этого он присваивает значения по умолчанию проходящим проверку
атрибутам, если они пусты.
132

Dmitry Korolev committed
133 134
- `value`: значение по умолчанию или функция обратного вызова, которая возвращает значение по умолчанию,
  которое будет присвоено проверяемому атрибуту, если он пустой. Функция обратного вызова должна выглядеть так:
135 136 137 138 139 140 141 142

```php
function foo($model, $attribute) {
    // ... вычисление $value ...
    return $value;
}
```

Dmitry Korolev committed
143 144
> Информация: Как определить, является значение пустым или нет, более подробно описано в отдельной статье
  в секции [Пустые значения](input-validation.md#handling-empty-inputs).
145 146 147 148 149 150


## [[yii\validators\NumberValidator|double]] <a name="double"></a>

```php
[
Dmitry Korolev committed
151
    // проверяет, является ли "salary" числом типа double
152 153 154 155
    ['salary', 'double'],
]
```

Dmitry Korolev committed
156
Этот валидатор проверяет, что входящее значение является корректным *double* числом. Он идентичен
Dmitry Korolev committed
157
валидатору [number](#number). (Прим. пер.: корректным float числом).
158 159 160 161 162 163 164 165 166

- `max`: верхний лимит (включительно) для значений. Если не установлен, значит, валидатор не будет проверять верхний лимит.
- `min`: Нижний лимит (включительно) для значений. Если не установлен, валидатор не будет проверять нижний лимит.


## [[yii\validators\EmailValidator|email]] <a name="email"></a>

```php
[
Dmitry Korolev committed
167
    // проверяет, что "email" - это корректный email-адрес
168 169 170
    ['email', 'email'],
]
```
Dmitry Korolev committed
171
Валидатор проверяет, что значение входящих данных является корректным email-адресом.
172

Dmitry Korolev committed
173
- `allowName`: можно ли передавать в атрибут имя (пример: `John Smith <john.smith@example.com>`). По умолчанию - false.
174 175
- `checkDNS`, проверяет, существует ли доменное имя для введенного адреса (и A, и MX запись).
  Учтите, что проверка может закончится неудачей, что может быть вызвано временными проблемами с DNS, даже если
yupe committed
176
  email-адрес корректен. По умолчанию - false.
177 178 179 180 181 182 183 184
- `enableIDN`, нужно ли учитывать IDN (многоязычные доменные имена). По умолчанию - false. Учтите, что для использования
  IDN-валидации вам нужно установить и включить PHP расширение `intl`, иначе будет выброшено исключение.


## [[yii\validators\ExistValidator|exist]] <a name="exist"></a>

```php
[
Dmitry Korolev committed
185
    // a1 должно существовать в столбце, который представляется атрибутом "a1"
186 187 188 189 190 191 192 193 194 195 196 197 198 199
    ['a1', 'exist'],

    // a1 должно существовать, но его значение будет использовать a2 для проверки существования
    ['a1', 'exist', 'targetAttribute' => 'a2'],

    // и a1, и a2 должны существовать, в противном случае оба атрибута будут возвращать ошибку
    [['a1', 'a2'], 'exist', 'targetAttribute' => ['a1', 'a2']],

    // и a1, и a2 должны существовать, но только атрибут a1 будет возвращать ошибку
    ['a1', 'exist', 'targetAttribute' => ['a1', 'a2']],

    // a1 требует проверки существования a2 и a3 (используя значение a1)
    ['a1', 'exist', 'targetAttribute' => ['a2', 'a1' => 'a3']],

Dmitry Korolev committed
200
    // a1 должен существовать. Если a1 - массив, то каждый его элемент должен существовать
201 202 203 204
    ['a1', 'exist', 'allowArray' => true],
]
```

Dmitry Korolev committed
205 206
Этот валидатор ищет входящие данные в столбце таблицы. Он работает только с атрибутами
модели [Active Record](db-active-record.md). Он поддерживает проверку и одного столбца, и нескольких.
207

Dmitry Korolev committed
208
- `targetClass`: имя класса [Active Record](db-active-record.md), который должен быть использован для проверки
Dmitry Korolev committed
209 210
  входящего значения. Если не установлен, будет использован класс текущей модели.
- `targetAttribute`: имя атрибута в `targetClass` который должен быть использован для проверки существования
Dmitry Korolev committed
211
  входящего значения. Если не установлен, будет использовано имя атрибута, который проверяется в данный момент.
Dmitry Korolev committed
212 213
  Вы можете использовать массив для валидации нескольких столбцов одновременно. Значения массива являются атрибутами,
  которые будут использованы для проверки существования, тогда как ключи массива будут являться атрибутами, чьи значения
214 215 216
  будут проверены. Если ключ и значения одинаковы, вы можете указать только значение.
- `filter`: дополнительный фильтр, который будет добавлен к запросу в базу данных для проверки на существование значения.
  Это может быть строка или массив, представляющие дополнительные условия в запросе (подробнее о формате
Dmitry Korolev committed
217
  значений запроса: [[yii\db\Query::where()]]), или анонимная функция с сигнатурой `function ($query)`,
218 219
  где `$query` - это [[yii\db\Query|Query]] объект, который вы можете модифицировать в функции.
- `allowArray`: разрешать ли значению быть массивом. По умолчанию - false. Если свойство установлено в true
Dmitry Korolev committed
220 221
  и тип входящих данных - массив, тогда каждый его элемент должен существовать в соответствующем столбце таблицы.
  Помните, что это свойство не может быть установлено в true, если вы валидируете несколько столбцов, передавая
222 223 224 225 226 227 228 229 230 231 232 233 234
  их в `targetAttribute` как массив.


## [[yii\validators\FileValidator|file]] <a name="file"></a>

```php
[
    // проверяет, что "primaryImage" - это загруженное изображение в формате PNG, JPG или GIF
    // размер файла должен быть меньше 1MB
    ['primaryImage', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024*1024],
]
```

Dmitry Korolev committed
235
Этот валидатор проверяет, что input является корректным загруженным файлом.
236

Dmitry Korolev committed
237
- `extensions`: список имен расширений, которые допустимы для загрузки. Это также может быть или массив, или
238 239 240 241
  строка, содержащая имена файловых расширений, разделенных пробелом или запятой (пр.: "gif, jpg").
  Имя расширения не чувствительно к регистру. По умолчанию - null, что значит, что все имена файловых расширений
  допустимы.
- `mimeTypes`: список MIME-типов которые допустимы для загрузки. Это может быть или массив, или строка,
Dmitry Korolev committed
242
  содержащая MIME-типы файлов, разделенные пробелом или запятой (пример: "image/jpeg, image/png").
yupe committed
243
  Имена mime-типов не чувствительны к регистру. По умолчанию - null, что значит, что допустимы все MIME-типы.
Dmitry Korolev committed
244
- `minSize`: минимальный размер файла в байтах, разрешенный для загрузки. По умолчанию - null, что значит, что нет
245
  минимального лимита.
Dmitry Korolev committed
246
- `maxSize`: максимальный размер файла в байтах, разрешенный для загрузки. По умолчанию - null, что значит, что нет
247 248
  максимального лимита.
- `maxFiles`: максимальное количество файлов, которое может быть передано в атрибут. По умолчанию 1, что значит, что
Dmitry Korolev committed
249
  input должен быть файлом в единственном экземпляре. Если больше, чем 1, то атрибут должен быть массивом,
Dmitry Korolev committed
250
  состоящим из не более, чем `maxFiles` загруженных файлов.
251
- `checkExtensionByMimeType`: нужно ли проверять расширение файла исходя из его MIME-типа. Если они не соответствуют
Dmitry Korolev committed
252
  друг другу, то файл будет считаться некорректным. По умолчанию - true, то есть проверка будет произведена.
253 254

`FileValidator` используется вместе с [[yii\web\UploadedFile]]. Пожалуйста, посмотрите раздел
Dmitry Korolev committed
255
[Загрузка файлов](input-file-upload.md) для более полного понимания загрузки и проверки файлов.
256 257 258 259 260 261


## [[yii\validators\FilterValidator|filter]] <a name="filter"></a>

```php
[
Dmitry Korolev committed
262
    // обрезает пробелы вокруг "username" и "email"
263 264 265 266 267 268 269 270 271 272
    [['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true],

    // нормализует значение "phone"
    ['phone', 'filter', 'filter' => function ($value) {
        // нормализация значения происходит тут
        return $value;
    }],
]
```

Dmitry Korolev committed
273
Этот валидатор не проверяет данные. Вместо этого он применяет указанный фильтр к входящему значению и
274 275 276 277 278
присваивает результат применения фильтра атрибуту.

- `filter`: PHP-callback, осуществляющий фильтрацию. Это может быть глобальная php функция, анонимная функция
  и т.д. Функция должна выглядеть как `function ($value) { return $newValue; }`. Это свойство обязательно должно
  быть установлено.
Dmitry Korolev committed
279
- `skipOnArray`: нужно ли пропускать валидацию, если входящим значением является массив. По умолчанию - false.
280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
  Помните, что если фильтр не может принимать массив, вы должны установить это значение в true. Иначе могут
  произойти различные ошибки PHP.

> Трюк: Если вы хотите удалить пробелы вокруг значений атрибута, вы можете использовать валидатор [trim](#trim).

## [[yii\validators\ImageValidator|image]] <a name="image"></a>

```php
[
    // проверяет, что "primaryImage" - это валидное изображение с указанными размерами
    ['primaryImage', 'image', 'extensions' => 'png, jpg',
        'minWidth' => 100, 'maxWidth' => 1000,
        'minHeight' => 100, 'maxHeight' => 1000,
    ],
]
```

Dmitry Korolev committed
297
Этот валидатор проверяет, что входящие данные являются корректным файлом изображения. Он расширяет [file](#file)
298 299 300
валидатор и наследует все его свойства. Кроме того, он поддерживает следующие дополнительные свойства, специфичные
для валидации изображений:

yupe committed
301
- `minWidth`: минимальная ширина изображения. По умолчанию null, что значит, что нет нижнего лимита.
302
- `maxWidth`: максимальная ширина изображения. По умолчанию null, что значит, что нет верхнего лимита.
yupe committed
303
- `minHeight`: минимальная высота изображения. По умолчанию null, что значит, что нет нижнего лимита.
304 305 306 307 308 309 310 311 312 313 314 315
- `maxHeight`: максимальная высота изображения. По умолчанию null, что значит, что нет верхнего лимита.


## [[yii\validators\RangeValidator|in]] <a name="in"></a>

```php
[
    // проверяет, что значение "level" равно 1, 2 или 3
    ['level', 'in', 'range' => [1, 2, 3]],
]
```

Dmitry Korolev committed
316
Этот валидатор проверяет, что вхоящее значение соответствует одному из значений, указанных в `range`.
317

Dmitry Korolev committed
318
- `range`: список значений, с которыми будет сравниваться входящее значение.
Dmitry Korolev committed
319
- `strict`: должно ли сравнение входящего значения со списком значений быть строгим (учитывать тип данных).
320
  По умолчанию false.
Dmitry Korolev committed
321
- `not`: должен ли результат проверки быть инвертирован. По умолчанию - false. Если свойство установлено в true,
yupe committed
322
  валидатор проверяет, что входящее значение НЕ соответствует ни одному из значений, указанных в `range`.
323
- `allowArray`: устанавливает, допустимо ли использовать массив в качестве входных данных. Если установлено в true
Dmitry Korolev committed
324
  и входящие данные являются массивом, для каждого элемента входящего массива должно быть найдено соответствие в
325 326 327 328 329 330 331 332 333 334 335 336
  `range`.


## [[yii\validators\NumberValidator|integer]] <a name="integer"></a>

```php
[
    // проверяет "age" на то, что это integer значение
    ['age', 'integer'],
]
```

Dmitry Korolev committed
337
Проверяет, что входящее значение является integer значением.
338 339 340 341 342 343 344 345 346

- `max`: верхний лимит (включительно) для числа. Если не установлено, валидатор не будет проверять верхний лимит.
- `min`: нижний лимит (включительно) для числа. Если не установлено, валидатор не будет проверять нижний лимит.


## [[yii\validators\RegularExpressionValidator|match]] <a name="match"></a>

```php
[
Dmitry Korolev committed
347 348
    // проверяет, что "username" начинается с буквы и содержит только буквенные символы,
    // числовые символы и знак подчеркивания
349 350 351 352
    ['username', 'match', 'pattern' => '/^[a-z]\w*$/i']
]
```

Dmitry Korolev committed
353
Этот валидатор проверяет, что входящее значение совпадает с указанным регулярным выражением.
354

Dmitry Korolev committed
355
- `pattern`: регулярное выражение, с которым должно совпадать входящее значение. Это свойство должно быть установлено,
356
  иначе будет выброшено исключение.
Dmitry Korolev committed
357 358
- `not`: инвертирует регулярное выражение. По умолчанию false, что значит, что валидация будет успешна,
   только если входящее значение совпадают с шаблоном. Если установлено в true, валидация будет успешна,
Dmitry Korolev committed
359
   только если входящее значение НЕ совпадает с шаблоном.
360 361 362 363 364 365 366 367 368 369 370


## [[yii\validators\NumberValidator|number]] <a name="number"></a>

```php
[
    // проверяет, является ли "salary" числом
    ['salary', 'number'],
]
```

Dmitry Korolev committed
371
Этот валидатор проверяет, являются ли входящие значения числовыми. Он эквивалентен валидатору [double](#double).
372 373 374 375 376 377 378 379 380 381 382 383 384 385

- `max`: верхний лимит (включительно) для числа. Если не установлено, валидатор не будет проверять верхний лимит.
- `min`: нижний лимит (включительно) для числа. Если не установлено, валидатор не будет проверять нижний лимит.


## [[yii\validators\RequiredValidator|required]] <a name="required"></a>

```php
[
    // проверяет, являются ли "username" и "password" не пустыми
    [['username', 'password'], 'required'],
]
```

Dmitry Korolev committed
386
Этот валидатор проверяет, являются ли входящие значения не пустыми.
387

yupe committed
388
- `requiredValue`: желаемое значение, которому должны соответствовать проверяемые данные. Если не установлено,
389
  это значит, что данные должны быть не пусты.
Dmitry Korolev committed
390 391
- `strict`: учитывать или нет соответствие типу данных при валидации (строгое сравнение).
  Если `requiredValue` не установлено, а это свойство установлено в true, валидатор проверит, что входящее значение
392 393
  строго не соответствует null; если свойство установлено в false, валидатор будет проверять значение на пустоту с
  приведением типов.
Dmitry Korolev committed
394 395
  Если `requiredValue` установлено, сравнение между входящими данными и `requiredValue` будет также учитывать тип
  данных, если это свойство установлено в true.
396 397

> Информация: как определить, является ли значение пустым или нет, подробнее рассказывается
Dmitry Korolev committed
398
  в секции [Пустые значения](input-validation.md#handling-empty-inputs).
399 400 401 402 403 404 405 406 407 408 409 410


## [[yii\validators\SafeValidator|safe]] <a name="safe"></a>

```php
[
    // обозначает "description" как safe атрибут
    ['description', 'safe'],
]
```

Этот валидатор не проверяет данные. Вместо этого он указывает, что атрибут является
Dmitry Korolev committed
411
[безопасным атрибутом](structure-models.md#safe-attributes).
412 413 414 415 416 417


## [[yii\validators\StringValidator|string]] <a name="string"></a>

```php
[
Dmitry Korolev committed
418
    // проверяет, что "username" это строка с длиной от 4 до 24 символов
419 420 421 422
    ['username', 'string', 'length' => [4, 24]],
]
```

Dmitry Korolev committed
423
Этот валидатор проверяет, что входящее значение - это корректная строка с указанной длиной.
424 425 426 427 428

- `length`: описывает длину для строки, проходящей валидацию. Может быть определен следующими
   способами:
     * числом: точная длина, которой должна соответствовать строка;
     * массив с одним элементом: минимальная длина входящей строки (напр.: `[8]`). Это перезапишет `min`.
Dmitry Korolev committed
429
     * массив с двумя элементами: минимальная и максимальная длина входящей строки (напр.: `[8, 128]`).
430
     Это перезапишет и `min`, и `max`.
Dmitry Korolev committed
431
- `min`: минимальная длина входящей строки. Если не установлено, то не будет ограничения на минимальную длину.
432 433
- `max`: максимальная длина входящей строки. Если не установлено, то не будет ограничения на максимальную длину.
- `encoding`: кодировка входящей строки. Если не установлено, будет использовано значение из
Dmitry Korolev committed
434
  [[yii\base\Application::charset|charset]], которое по умолчанию установлено в `UTF-8`.
435 436 437 438 439 440 441 442 443 444 445


## [[yii\validators\FilterValidator|trim]] <a name="trim"></a>

```php
[
    // обрезает пробелы вокруг "username" и "email"
    [['username', 'email'], 'trim'],
]
```

Dmitry Korolev committed
446
Этот валидатор не производит проверки данных. Вместо этого он будет обрезать пробелы вокруг входящих данных.
Dmitry Korolev committed
447
Помните, что если входящие данные являются массивом, то они будут проигнорированы этим валидатором.
448 449 450 451 452 453 454 455 456


## [[yii\validators\UniqueValidator|unique]] <a name="unique"></a>

```php
[
    // a1 должен быть уникальным в столбце, который представляет "a1" атрибут
    ['a1', 'unique'],

Dmitry Korolev committed
457 458
    // a1 должен быть уникальным, но для проверки на уникальность
    // будет использован столбец a2
459 460
    ['a1', 'unique', 'targetAttribute' => 'a2'],

Dmitry Korolev committed
461 462
    // a1 и a2 вместе должны быть уникальны, и каждый из них
    // будет получать сообщения об ошибке
463 464 465 466 467 468 469 470 471 472 473
    [['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']],

    // a1 и a2 вместе должны быть уникальны, но только a1 будет получать сообщение об ошибке
    ['a1', 'unique', 'targetAttribute' => ['a1', 'a2']],

    // a1 должен быть уникальным, что устанавливается проверкой уникальности a2 и a3
    // (используя значение a1)
    ['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']],
]
```

Dmitry Korolev committed
474
Этот валидатор проверяет входящие данные на уникальность в столбце таблицы. Он работает только с
475 476 477 478
атрибутами модели [Active Record](db-active-record.md). Он поддерживает проверку либо одного столбца,
либо нескольких.

- `targetClass`: имя класса [Active Record](db-active-record.md), который должен быть использован
Dmitry Korolev committed
479
  для проверки значения во входящих данных. Если не установлен, будет использован класс модели, которая
Dmitry Korolev committed
480
  в данный момент проходит проверку.
481
- `targetAttribute`: имя атрибута в `targetClass`, который должен быть использован для проверки на
Dmitry Korolev committed
482
  уникальность входящего значения. Если не установлено, будет использован атрибут, проверяемый
483
  в данный момент.
Dmitry Korolev committed
484
  Вы можете использовать массив для проверки нескольких столбцов таблицы на уникальность. Значения массива -
485 486 487 488
  это атрибуты, которые будут использованы для валидации, а ключи массива - это атрибуты, которые предоставляют
  данные для валидации. Если ключ и значение одинаковые, вы можете указать только значение.
- `filter`: дополнительный фильтр, который можно присоединить к запросу в БД, чтобы использовать его при
  проверке значения на уникальность. Это может быть строка или массив, представляющие дополнительные условия для запроса
Dmitry Korolev committed
489
  (см. [[yii\db\Query::where()]] о формате условий в запросе), или анонимная функция вида `function ($query)`,
490 491 492 493 494 495 496 497 498 499 500 501 502
  где `$query` это объект [[yii\db\Query|Query]], который вы можете изменить в функции.


## [[yii\validators\UrlValidator|url]] <a name="url"></a>

```php
[
    // Проверяет, что "website" является корректным URL. Добавляет http:// к атрибуту "website".
    // если у него нет URI схемы
    ['website', 'url', 'defaultScheme' => 'http'],
]
```

Dmitry Korolev committed
503
Этот валидатор проверяет, что входящее значение является корректным URL.
504

Dmitry Korolev committed
505
- `validSchemes`: массив с указанием на URI-схему, которая должна считаться корректной. По умолчанию
Dmitry Korolev committed
506
  `['http', 'https']`, что означает, что и `http`, и `https` URI будут считаться корректными.
Dmitry Korolev committed
507 508
- `defaultScheme`: схема URI, которая будет присоединена к входящим данным, если в них отсутствует URI-схема.
  По умолчанию null, что значит, что входящие данные не будут изменены.
509
- `enableIDN`: должна ли валидация учитывать IDN (интернационализованные доменные имена).
Dmitry Korolev committed
510
  По умолчанию - false. Учтите, что для того, чтобы IDN валидация работала корректно, вы должны установить `intl`
511 512
  PHP расширение, иначе будет выброшено исключение.