Изменение стандартных предупреждений о незаполненых полях формы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
phpstarter
Сообщения: 241
Зарегистрирован: 2014.12.06, 00:06

Изменение стандартных предупреждений о незаполненых полях формы

Сообщение phpstarter »

Если в модели некоторые переменные указать как required, то в случае если он не заполнены во время отсылания формы, Yii предупреждает пользователя о том что запись не будет добавлена пока данный пункт не будет заполнен.
На любое поле выходит стандартное предупреждение с именем ячейки.
"Ячейка такаято не заполнена".
Можно ли както для одной конкретной ячейки выводить другой текст ? Если да то как это реализовать ?
phpstarter
Сообщения: 241
Зарегистрирован: 2014.12.06, 00:06

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение phpstarter »

И попутно какбы еще этому тексту добавить мультиязычность ?
AlexPa
Сообщения: 29
Зарегистрирован: 2011.03.31, 20:49

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение AlexPa »

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

public function rules()
    {
        return [
            [['uid', 'title', 'body'], 'required'],
            [['title'], 'required', 'message'=>Yii::t('app', 'This field is required')],
        ];
    }
Вот так например
arogachev
Сообщения: 52
Зарегистрирован: 2014.09.09, 14:32

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение arogachev »

Переопределить сообщение для конкретного поля можно путем замены 'message'. Это свойство есть в каждом валидаторе.

https://github.com/yiisoft/yii2/blob/ma ... r.php#L100

Заметьте, что для некоторых валидаторов таких сообщений может быть больше (например, для integer при задании min и max - число слишком мало, число слишком велико и т.п.).

Такая замена, разумеется, будет уже не мультиязычна.

Про интернационализацию почитайте тут:

http://www.yiiframework.com/doc-2.0/gui ... -i18n.html

или в соответствующей русской ветке документации на гитхабе.

Кроме этого, в сообщение в большинстве случаев передаются некоторые параметры, например, {attribute} и {value}.
Мой профиль на Github
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение zelenin »

phpstarter писал(а):Если в модели некоторые переменные указать как required, то в случае если он не заполнены во время отсылания формы, Yii предупреждает пользователя о том что запись не будет добавлена пока данный пункт не будет заполнен.
На любое поле выходит стандартное предупреждение с именем ячейки.
"Ячейка такаято не заполнена".
Можно ли както для одной конкретной ячейки выводить другой текст ? Если да то как это реализовать ?
когда добавляете в модели валидаторы, у каждого валидатора есть атрибут message - туда вписываете свой текст. Соответственно в мультиязычном формате.
phpstarter
Сообщения: 241
Зарегистрирован: 2014.12.06, 00:06

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение phpstarter »

просто текст переводить путем

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

 echo \Yii::t('app', 'I am a message!'); 
я умею.
Имею свою папку со своим языком.
Но там нет defaultной папки, а yii всеравно откудато ведь печатает данные сообщения ?
посмотрел по vendor/yiisoft/messages - там тоже папки en нету.

В конфиге у меня следующее прописано

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

'db' => require(__DIR__ . '/db.php'),
        'i18n' => [
            'translations' => [
                'app*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'sourceLanguage' => 'en',
                    'fileMap' => [
                        'app'       => 'app.php',
                        'app/error' => 'error.php',
                    ],
                ],
            ],
        ], 
Гдебы могла хранится папка en с default-ными текстами ?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение zelenin »

phpstarter писал(а):просто текст переводить путем

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

 echo \Yii::t('app', 'I am a message!');
я умею.
Имею свою папку со своим языком.
Но там нет defaultной папки, а yii всеравно откудато ведь печатает данные сообщения ?
посмотрел по vendor/yiisoft/messages - там тоже папки en нету.

В конфиге у меня следующее прописано

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

'db' => require(__DIR__ . '/db.php'),
        'i18n' => [
            'translations' => [
                'app*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'sourceLanguage' => 'en',
                    'fileMap' => [
                        'app'       => 'app.php',
                        'app/error' => 'error.php',
                    ],
                ],
            ],
        ],
Гдебы могла хранится папка en с default-ными текстами ?
https://github.com/yiisoft/yii2/blob/ma ... or.php#L46
phpstarter
Сообщения: 241
Зарегистрирован: 2014.12.06, 00:06

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение phpstarter »

Спасибо, потихоньку переварил все.
Мои мысли.
Значит надо в модели указать валидатор нового типа скажем

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

 "requiered_2" 
Соотвественно скопировать файл RequiredValidator.php под именем Required_2Validator.php
В нем вместо

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

 Yii::t('yii', '{attribute} cannot be blank.')  
прописать нужный мне текст. При этом мультиязычность не пострадает, так как соотвествующий перевод у себя в message папке я добавлю.
Вопрос только как дальше привязать новый валидатор и этот его новый файл к самому ядру yii ?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение zelenin »

phpstarter писал(а):Спасибо, потихоньку переварил все.
Мои мысли.
Значит надо в модели указать валидатор нового типа скажем

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

 "requiered_2"
Соотвественно скопировать файл RequiredValidator.php под именем Required_2Validator.php
В нем вместо

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

 Yii::t('yii', '{attribute} cannot be blank.')
прописать нужный мне текст. При этом мультиязычность не пострадает, так как соотвествующий перевод у себя в message папке я добавлю.
Вопрос только как дальше привязать новый валидатор и этот его новый файл к самому ядру yii ?
вы выборочно читаете. Я выше написал, что при прописывании правила валидации можно указать свой message взамен дефолтного из валидатора
phpstarter
Сообщения: 241
Зарегистрирован: 2014.12.06, 00:06

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение phpstarter »

Извините, просто я не совсем понял как это осуществить.
Ок я в модели добавляю required_2.
файл Required_2Validator.php мне не нужно создавать ?
Как добавить в yii данный новый валидатор и если он добавится в каком месте будет хранится его message.

Еще раз прошу простить но может быть самые простые вещи для вас, могут быть слегка запутанными для новичков как я. Поэтому просьба не сердиться.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение zelenin »

phpstarter писал(а):Извините, просто я не совсем понял как это осуществить.
Ок я в модели добавляю required_2.
файл Required_2Validator.php мне не нужно создавать ?
Как добавить в yii данный новый валидатор и если он добавится в каком месте будет хранится его message.

Еще раз прошу простить но может быть самые простые вещи для вас, могут быть слегка запутанными для новичков как я. Поэтому просьба не сердиться.
не надо создавать свой валидатор, используйте стандартные.
phpstarter
Сообщения: 241
Зарегистрирован: 2014.12.06, 00:06

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение phpstarter »

Тоесть прямо в файле RequiredValidator.php

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

    public function init()
    {
        parent::init();
        if ($this->message === null) {
            $this->message = Yii::t('yii', '{attribute} must be either "{true}" or "{false}".');
        }
    } 
Сюда подкинуть свое условие.

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

    public function init()
    {
        parent::init();
        if ($this->message === null) {
            if (атрибут == спецАтрибут) {
            $this->message = Yii::t('yii', '{attribute} BLABLABLA "{true}" or "{false}".');
            }
            else {
            $this->message = Yii::t('yii', '{attribute} must be either "{true}" or "{false}".');
            }
        }
    } 
Если я Вас правильно понял , подскажите только что прописать вместо

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

 if (атрибут == спецАтрибут) { 
?
phpstarter
Сообщения: 241
Зарегистрирован: 2014.12.06, 00:06

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение phpstarter »

Блин все было намного проще чем я думал. Большое спасибо !!!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение zelenin »

phpstarter писал(а):Тоесть прямо в файле RequiredValidator.php

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

    public function init()
    {
        parent::init();
        if ($this->message === null) {
            $this->message = Yii::t('yii', '{attribute} must be either "{true}" or "{false}".');
        }
    } 
Сюда подкинуть свое условие.

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

    public function init()
    {
        parent::init();
        if ($this->message === null) {
            if (атрибут == спецАтрибут) {
            $this->message = Yii::t('yii', '{attribute} BLABLABLA "{true}" or "{false}".');
            }
            else {
            $this->message = Yii::t('yii', '{attribute} must be either "{true}" or "{false}".');
            }
        }
    } 
Если я Вас правильно понял , подскажите только что прописать вместо

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

 if (атрибут == спецАтрибут) { 
?
начнем сначала: для чего вам валидатор? что вы им делаете?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение zelenin »

phpstarter писал(а):Блин все было намного проще чем я думал. Большое спасибо !!!
ну вот - это я вам и писал несколько раз.
phpstarter
Сообщения: 241
Зарегистрирован: 2014.12.06, 00:06

Re: Изменение стандартных предупреждений о незаполненых полях формы

Сообщение phpstarter »

Извините просто сразу не допер :) А тут как говорится носом ткнули и сразу все прояснилось :)
Ответить