как разместить ошибку формы yii2 в заголовке тега привязки - PullRequest
0 голосов
/ 04 декабря 2018

как поместить ошибку формы yii2 в заголовок тега привязки

Это мой код

$form = ActiveForm::begin([
    'id' => 'login-form',
    'options' => ['class' => 'form-horizontal'],
    'fieldConfig' => [
        'template' => '
            {label}
            <div class="error-block">
                <a href="#" title="{error}">error</a>
            </div>
            {input}
            ',
        'errorOptions' => ['tag' => null]
    ],
]);

Я хочу добавить ошибку в заголовок тега привязки в YII2

<a href="#" title="{error}">error</a>

1 Ответ

0 голосов
/ 05 декабря 2018

Вам нужно отобразить текст ошибки внутри атрибута якорных тегов title, и использование опции template не поможет вам достичь этого автоматически.

Несколько вещей в вашем подходе.

  • Вы указываете "tag"=>null в errorOptions, который не создает html по умолчанию <p class="help-block help-block-error"></p>.

  • Даже если вы указываете тег как div или span, даже в этом случае он будет нарушать HTML, поскольку заголовок атрибута имеет двойные кавычки <a href="#" title="{error}">error</a>, а созданный тег также будет иметь двойные кавычки <div class="help-block help-block-error"></div>.

  • Тогда, есливы изменяете <a href="#" title="{error}">error</a> на <a href="#" title=\'{error}\'>error</a>, чтобы исправить неисправный HTML javascript не сможет обнаружить элемент.

Итак, событие afterValidateAttribute придет к вамспасение, которое запускается после проверки всей формы и каждого атрибута.

Подпись обработчика события должна быть:

function (event, attribute, messages)

где

  • event: объект события.

  • attribute: атрибутe проверяется.Пожалуйста, обратитесь к attributeDefaults для структуры этого параметра.

  • messages: массив, в который вы можете добавить дополнительные сообщения об ошибках проверки для указанного атрибута.

Теперь измените template в fieldConfig на следующее и удалите {error} из шаблона и errorOptions, так как это не нужно, и просто сохраните свою ошибкуЭлемент внутри шаблона.

'fieldConfig' => [
    'template' => '
        {label}
        <div class="error-block">
            <a href="#" title="">error</a>
        </div>
        {input}
        ',
],

Теперь добавьте нижеприведенный javascript вверху вашего представления, где вы отображаете форму.

$js = <<< JS
$("#login-form").on(
    'afterValidateAttribute',
    function (event,attribute,messages) {
        let input=attribute.input;
        $(input).siblings('.error-block').find('a').attr('title',messages.join(','));
    }
);
JS;
$this->registerJs($js, \yii\web\View::POS_READY);

Теперь, если вы focus изили нажмите кнопку «Отправить», и вы увидите сообщения об ошибках, которые заполняются в атрибуте title тега a.

...