Добрый день есть такая простоя форма: PHP: <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'name')->textarea(['rows' => '3'])->label('Введите описание операции:') ?> <?= Html::submitButton('Добавить', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?> <?php ActiveForm::end(); ?> есть проверка этой формы: PHP: class ModelCheckList extends ActiveRecord{ public $name; public function rules(){ return [ ['name', 'required', 'message'=>'Не заполнено поле.'], ['name', 'string', 'min' => 4, 'tooShort'=>'Описание должно содержать не менее 4 символов.'], ['name', 'string', 'max' => 500, 'tooLong'=>'Описание должно содержать не более 500 символов.'], ]; } } Теперь хочу добавить сообщение которое выходит если данные уже существую в бд, делаю так: PHP: class ModelCheckList extends ActiveRecord{ public $name; public function rules(){ return [ ['name', 'required', 'message'=>'Не заполнено поле.'], ['name', 'string', 'min' => 4, 'tooShort'=>'Описание должно содержать не менее 4 символов.'], ['name', 'string', 'max' => 500, 'tooLong'=>'Описание должно содержать не более 500 символов.' ['name', 'unique', 'targetClass' => ModelCheckList::checkNameOperations() , 'message' => 'Данное описание уже существует'], ]; } public function checkNameOperations(){ return false; } } Подскажите что не так, сообщение об ошибке не выходит =( вот инструкция к unique: Код (Text): targetClass: имя класса Active Record, который должен быть использован для проверки значения во входящих данных. Если не установлен, будет использован класс модели, которая в данный момент проходит проверку. targetAttribute: имя атрибута в targetClass, который должен быть использован для проверки на уникальность входящего значения. Если не установлено, будет использован атрибут, проверяемый в данный момент. Вы можете использовать массив для проверки нескольких столбцов таблицы на уникальность. Значения массива - это атрибуты, которые будут использованы для валидации, а ключи массива - это атрибуты, которые предоставляют данные для валидации. Если ключ и значение одинаковые, вы можете указать только значение. filter: дополнительный фильтр, который можно присоединить к запросу в БД, чтобы использовать его при проверке значения на уникальность. Это может быть строка или массив, представляющие дополнительные условия для запроса (см. yii\db\Query::where() о формате условий в запросе), или анонимная функция вида function ($query), где $query это объект Query, который вы можете изменить в функции. допрет до меня наверное, но так как примеров там нет, думаю долго буду втыкать =)
Чувак, сам же цитируешь, что в targetClass должно быть имя класса ActiveRecord. А ты что туда пихаешь?
@Artur_hopf, имя класса передётся как строка, какое нафиг двоеточие, функция и т.п.? Ты передаёшь false вместо имени класса.
@mkramer если я напишу так, он же не поймет в какой таблице искать данные PHP: public function rules(){ return [ ['name', 'required', 'message'=>'Не заполнено поле.'], ['name', 'string', 'min' => 4, 'tooShort'=>'Описание должно содержать не менее 4 символов.'], ['name', 'string', 'max' => 500, 'tooLong'=>'Описание должно содержать не более 500 символов.'], ['name', 'unique', 'targetClass' => 'ModelCheckList', 'message' => 'Данное описание уже существует'] ]; } вот как сделать чтобы он понял?
я понимаю что название класса должно быть одинаково с именем таблицы. Но к сожалению таблица может находится в другой базе данных, а так я назвать не могу: PHP: class database_1.dbo.CheckListNameOperations extends ActiveRecord{ }
static tableName() для этого имеется, перекрываешь, пишешь своё имя таблицы. И getDb(), которая возвращает, в какой базе данных лазить. Имя класса должно быть полным, со всеми namespace. Начиная с php 5.5 для этого предусмотрена предопределённая константа ::class. unique не умеет без ActiveRecord по базам лазить --- Добавлено --- @Artur_hopf, что мешает прочитать от начала до конца документацию к Yii на великом и могучем?
@mkramer спасибо большое. Скудоумие мешает читать инструкции Еще со времен работы на ТЭЦ от инструкций засыпаю, мозги сопротивляются как могут. Могу читать только по блочно, но не все сразу. Такой уж я, но справляюсь =) --- Добавлено --- Разобрался я в общем по своему, по скудоумский=)