Не выводиться кастомная ошибка из модели.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Не выводиться кастомная ошибка из модели.

Сообщение leonenco »

Привет всем, с наступающим новым годом. Проблемка возникла. Не могу вывести сообщение о ошибке из model rules. Вот концепт: Есть главная модель Contact -> наследуется от base Model. Создал модель Painting наследуется от Contact. в Contact:

Код: Выделить всё

public function rules()
    {
        return [
            // name, email, subject and body are required
            [['zip'], 'required', 'message' => 'Please type in your {attribute}.'],
            [['zip'], 'string', 'length' => [5, 5]],
            [['zip'], 'integer', 'min' => 55001, 'max' => 56763, 'message' => 'We do not serve this area right now.'],
        ];
    }
В ActiveForm когда ввожу значение скажем 65335 должно отрабатываться сообщение мое, а я до сих пор получаю
Zip Code must be no greater than 56763.
В чем причина и куда копать?

Спасибо за ответы заранее.
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Не выводиться кастомная ошибка из модели.

Сообщение leonenco »

Я делал как то для другой компании что то подобное и тогда я использовал кастомный валидатор:

Код: Выделить всё

/*
     * Get zip checked by range
     * @return bool
     */
    
    public function checkZip($attribute) {
        if(!in_array($this->$attribute, range(55001, 56763)) && !in_array($this->$attribute, range(53001, 54990))){
                $this->addError($attribute, 'We do not serve this area right now. Sorry');
        }
    }
Есть ли более нативные методы решения этой задачи? и почему Validator не отрабатывает свойство?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Не выводиться кастомная ошибка из модели.

Сообщение rak »

там для разных ошибок валидации разные сообщения
https://www.yiiframework.com/doc/api/2. ... Big-detail
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Не выводиться кастомная ошибка из модели.

Сообщение leonenco »

Я это пробовал, но это решение для конкретного случая 'min' или 'max'. Все они используют интерфейс от yii\validators\Validator, так что 'message' должен в любом случае отрабатывать для любой ошибки. Не так?
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Не выводиться кастомная ошибка из модели.

Сообщение leonenco »

leonenco писал(а): 2020.12.30, 05:21 Я это пробовал, но это решение для конкретного случая 'min' или 'max'. Все они используют интерфейс от yii\validators\Validator, так что 'message' должен в любом случае отрабатывать для любой ошибки. Не так?
Кстати они тоже не сработали, показало стандартное сообщение об ошибке.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Не выводиться кастомная ошибка из модели.

Сообщение maleks »

leonenco писал(а): 2020.12.30, 05:23 Кстати они тоже не сработали, показало стандартное сообщение об ошибке.

Код: Выделить всё

       $message = 'We do not serve this area right now.';
        return [
            // name, email, subject and body are required
            [['zip'], 'required', 'message' => 'Please type in your {attribute}.'],
            [['zip'], 'string', 'length' => [5, 5]],
            [['zip'], 'integer', 'min' => 55001, 'max' => 56763, 'tooBig' => $message, 'tooSmall' => $message],
        ];
Что, вот такой код не выдаст указанного сообщения об ошибке?
Yii2 universal module sceleton - for basic and advanced templates
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Не выводиться кастомная ошибка из модели.

Сообщение rak »

leonenco писал(а): 2020.12.30, 05:21 Я это пробовал, но это решение для конкретного случая 'min' или 'max'. Все они используют интерфейс от yii\validators\Validator, так что 'message' должен в любом случае отрабатывать для любой ошибки. Не так?
message сработает если в поле ввести не integer
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Не выводиться кастомная ошибка из модели.

Сообщение leonenco »

rak писал(а): 2020.12.30, 15:17
leonenco писал(а): 2020.12.30, 05:21 Я это пробовал, но это решение для конкретного случая 'min' или 'max'. Все они используют интерфейс от yii\validators\Validator, так что 'message' должен в любом случае отрабатывать для любой ошибки. Не так?
message сработает если в поле ввести не integer
Возможно, но как быть когда мне надо свалидировать иммено цифровой рэндж? для чего тогда min и max предназначены?
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Не выводиться кастомная ошибка из модели.

Сообщение leonenco »

maleks писал(а): 2020.12.30, 07:20
leonenco писал(а): 2020.12.30, 05:23 Кстати они тоже не сработали, показало стандартное сообщение об ошибке.

Код: Выделить всё

       $message = 'We do not serve this area right now.';
        return [
            // name, email, subject and body are required
            [['zip'], 'required', 'message' => 'Please type in your {attribute}.'],
            [['zip'], 'string', 'length' => [5, 5]],
            [['zip'], 'integer', 'min' => 55001, 'max' => 56763, 'tooBig' => $message, 'tooSmall' => $message],
        ];
Что, вот такой код не выдаст указанного сообщения об ошибке?
Это сработало. Спасибо. А в чем причина не обработки стандартного сообщения?
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: Не выводиться кастомная ошибка из модели.

Сообщение proctoleha »

А может проблема в том, что есть просто message, и есть tooBig и tooSmall?

При превышении интервала должно отрабатывать сообщение tooBig, если значение меньше минимального - tooSmall, и тогда понятно почему не отрабатывало message. Его в этом валидаторе, скорей всего нет.
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Не выводиться кастомная ошибка из модели.

Сообщение leonenco »

proctoleha писал(а): 2020.12.31, 08:10 А может проблема в том, что есть просто message, и есть tooBig и tooSmall?

При превышении интервала должно отрабатывать сообщение tooBig, если значение меньше минимального - tooSmall, и тогда понятно почему не отрабатывало message. Его в этом валидаторе, скорей всего нет.
При возникновении ошибки должно смотреть если не заданы свойства класса а потом родителя. Integer Validator метод Core Validator наследуется от Validator, там свойство message, оно относиться ко всем валидаторам. По идее я могу и не указывать какието конкретные своства валидатора а просто задать значение родителя и это должно работать. Не так ли?
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Не выводиться кастомная ошибка из модели.

Сообщение maleks »

leonenco писал(а): 2020.12.31, 09:38 Не так ли?
В yii абсолютно не надо о таких вещах догадываться, идете и смотрите код, и точно выясняете что и как работает
Yii2 universal module sceleton - for basic and advanced templates
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Не выводиться кастомная ошибка из модели.

Сообщение rak »

proctoleha писал(а): 2020.12.31, 08:10 А может проблема в том, что есть просто message, и есть tooBig и tooSmall?

При превышении интервала должно отрабатывать сообщение tooBig, если значение меньше минимального - tooSmall, и тогда понятно почему не отрабатывало message. Его в этом валидаторе, скорей всего нет.
все верно, но message тут есть, просто выводится если ввести не число
Ответить