Есть форма из трех полей. Модель представлена ниже.
<?php
namespace app\models;
use Yii;
use yii\db\ActiveRecord;
class Add extends ActiveRecord
{
const PERMISSIONS_PRIVATE = 10;
const PERMISSIONS_PUBLIC = 20;
public $name;
public $login;
public $password;
private $connection;
public function __construct()
{
$this->connection = Yii::$app->db;
}
public static function tableName(){
return 'users';
}
public function rules()
{
return [
[['name','login','password'], 'required'],
[['login'], 'email'],
[['login'], 'unique'],
];
}
}
Правила валидации: все поля обязательны для заполнения, в поле "Логин" должен быть введен e-mail, также в поле "Логин" должно быть введено уникальное значение, не существующее в колонке "login" таблицы "users".
Суть проблемы:
Если метод rules() оставить таким, каким он есть выше, а из полей формы заполнить только одно поле Логин валидным e-mail, но невалидным по уникальности, отправить форму, то поля "Name" и "Password" подсветятся красным и возле них выведутся сообщения о невалидности данных. При этом, значение в поле "Логин" отображается, как валидное (хоть и не является уникальным).
Если в методе rules() убрать абсолютно все правила валидации, кроме уникальности логина, а форму отправить с теми же данными (только правильный, но не уникальный e-mail), то это правило сработает и юудет выведено сообщение о том, что такой логин уже существует.
Итог:
Правило unique срабатывает только, когда оно является единственным правилом в методе rules()
Вопрос:
Почему так происходит и что нужно сделать, чтоб проверка уникальности срабатывала вместе с другими правилами?