Как сделать такой кастомный message error

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Как сделать такой кастомный message error

Сообщение evgeniy123 »

У меня идет сохранение модели из формы.
The combination "2"-"1404" of Poisk and Post has already been taken.
Model:

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

...

[['Poisk', 'Post'],  'unique', 'targetAttribute' => ['Poisk', 'Post']],

...
V модель я вставляю числа, которые я беру из списков других моделей. Но меня не устраивает ошибка с этими числами . Мне хочется показывать имена ассоциированные с этими id моделей. Подскажите как такое можно реализовать
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Как сделать такой кастомный message error

Сообщение caHek2x »

думаю через валидатор unique никак не выйдет т.к. в message можно только текст запихнуть, функцию нельзя (
но можете просто сделать свой валидатор где писать свою ошибку ...
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Как сделать такой кастомный message error

Сообщение evgeniy123 »

caHek2x писал(а): 2017.10.17, 01:04 думаю через валидатор unique никак не выйдет т.к. в message можно только текст запихнуть...

Так мне текст и нужно туда вставить ... Взять это из модели у которой id что показывает ошибка сейчас. или все равно никак ?
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Как сделать такой кастомный message error

Сообщение Alexum »

Вы не так поняли, для стандартного валидатора можно задать 'message' => 'Текст сообщения' , но внутри этого сообщения можно использовать только плейсхолдеры {attribute}, {attributes}, {value}, {values}. Если вам нужны данные из связной модели то потребуется - написать свой валидатор.

Ниже пример НЕ на уникальность, но общий смысл должен быть понятен.

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

// В rules
...
    [['agent_is_deputy_manager'], 'validateDeputyManager'],
...    
// Далее в модели
public function validateDeputyManager($attribute, $params)
    {
        if ($this->agent_is_deputy_manager === 1) {
            $query = Agents::find()->andWhere(['agent_supervisor_user_id' => $this->agent_supervisor_user_id, 'agent_is_deputy_manager' => 1]);
            if (!$this->isNewRecord) {
                $query->andWhere(['!=', 'agent_id', $this->agent_id]);
            }

            $deputyManager = $query->one();
            if ($deputyManager) {
                $this->addError($attribute, 'Агент не может быть заместителем, т.к. у менеджера уже назначен заместитель - ' . $deputyManager->agent_full_name);
            }
        }
    }
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Как сделать такой кастомный message error

Сообщение evgeniy123 »

Alexum писал(а): 2017.10.17, 14:03 Вы не так поняли, для стандартного валидатора можно задать 'message' => 'Текст сообщения' , но внутри этого сообщения можно использовать только плейсхолдеры {attribute}, {attributes}, {value}, {values}. Если вам нужны данные из связной модели то потребуется - написать свой валидатор.

Ниже пример НЕ на уникальность, но общий смысл должен быть понятен.

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

// В rules
...
    [['agent_is_deputy_manager'], 'validateDeputyManager'],
...    
// Далее в модели
public function validateDeputyManager($attribute, $params)
    {
        if ($this->agent_is_deputy_manager === 1) {
            $query = Agents::find()->andWhere(['agent_supervisor_user_id' => $this->agent_supervisor_user_id, 'agent_is_deputy_manager' => 1]);
            if (!$this->isNewRecord) {
                $query->andWhere(['!=', 'agent_id', $this->agent_id]);
            }

            $deputyManager = $query->one();
            if ($deputyManager) {
                $this->addError($attribute, 'Агент не может быть заместителем, т.к. у менеджера уже назначен заместитель - ' . $deputyManager->agent_full_name);
            }
        }
    }
Да. Все понял. Спасибо. Буду продолжать
Закрыто