Yii2, Пользовательское сообщение проверки с именами атрибутов

В форме авторизации мне нужно иметь glyphicon-remove значок в конце каждого сообщения проверки с соответствующими именами полей. Поэтому я использовал приведенный ниже код в Login model,

['email', 'required', 'message' => 'Email cannot be blank<span class="glyphicon glyphicon-remove"></span>'],
['password', 'required', 'message' => 'Password cannot be blank<span class="glyphicon glyphicon-remove"></span>']

Вместо приведенного выше кода, есть ли возможность использовать что-то вроде приведенного ниже кода.

[['email', 'password'], 'required', 'message' => $attribute.' cannot be blank<span class="glyphicon glyphicon-remove"></span>']

Идея вышеприведенного кода состоит в том, чтобы динамически получать соответствующее имя поля для каждого поля.

Пожалуйста сделай все необходимое. Благодарю.

Обновить

HTML код (<span class="glyphicon glyphicon-remove"></span>) здесь я использовал вывод правильно с помощью encode=>'false', Но что мне нужно, вместо того, чтобы определять отдельно для каждого поля, нужно определить обычно для всех полей.

11

Решение

Ты можешь использовать {attribute} в вашем сообщении для ссылки на имя атрибута.

public function rules()
{
return [
[
['email','password', 'password_verify', 'alias', 'fullname'],
'required',
'message' => '{attribute} is required'
],
[['email'], 'email'],
[['fullname'], 'string', 'max' => 50],
[['password', 'password_verify'], 'string', 'min' => 8, 'max' => 20],
[['password_verify'], 'compare', 'compareAttribute' => 'password'],
];
}

Вы также можете использовать другие параметры, установленные в валидаторе, такие как {min} или же {requiredValue}

23

Другие решения

Добавьте это в вашей форме:

_form.php

<?php
$form = ActiveForm::begin([
'options' => ['enctype' => 'multipart/form-data'],
'fieldConfig' => ['errorOptions' => ['encode' => false, 'class' => 'help-block']]
]);
?>

errorOptions кодировка по умолчанию true, поэтому ваш HTML-код закодирован как сообщение, поэтому он не будет работать, пока вы не установите 'encode' => false,

2

По вопросам рекламы [email protected]