#laravel #laravel-blade
#laravel #laravel-blade
Вопрос:
Laravel 7.X
Я создал простой анонимный компонент блейда ввода, который включает вывод ошибки проверки. Это был перевод ранее работавшего шаблона.
Компонент выглядит следующим образом:
<div class="form-group">
<label for='{{$field}}'>{{$title}} @error($field) - <span class='text-danger'> {{ $message }} </span> @enderror </label>
<input id='{{$field}}' name='{{$field}}' type="text" class='form-control{{ $errors->has($field) ? ' is-invalid' : '' }}' placeholder='{{$placeholder}}' {{$attributes}} value='{{ old($field, $value) }}' >
</div>
В представлении я делаю следующее:
<x-input-validation autofocus onblur="validate()">
<x-slot name="field">name</x-slot>
<x-slot name="title">Name</x-slot>
<x-slot name="placeholder">Add Name</x-slot>
<x-slot name="value">{{$app->name}}</x-slot>
</x-input-validation>
Во время рендеринга я получаю следующее сообщение об ошибке:
array_key_exists(): The first argument should be either a string or an integer (View: C:wamp64wwwDEresourcesviewscomponentsinput-validation.blade.php)
Проблема, по-видимому, связана с директивой @error($field) и старой функцией ($field, $value). Если я изменю их, чтобы удалить переменную $field , она будет отображаться.
Похоже, что он также работает без изменений, если нет ошибок проверки или если в сеансе не сохранены предыдущие значения. В этой ситуации он также отображается правильно.
После многих попыток, похоже, одним из лакомых кусочков является то, что переменная $field имеет тип HtmlString . Не уверен, отвлекающий маневр это или нет, но, учитывая, что он жалуется на тип, я предполагаю, что это источник проблемы.
Есть идеи, как мне исправить эту проблему? Я в тупике.
Спасибо!
Комментарии:
1. Я смог решить эту проблему, используя html_entity_decode($field) в каждой из функций @error, $error->has($field) и old($field, $value). Теперь он работает. Честно говоря, это не ожидалось.
Ответ №1:
Я решил эту проблему, используя html_entity_decode($field) в каждой из функций @error, $error->has($field) и old($field, $value).
Поскольку $field был экземпляром HtmlString , html_entity_decode возвращает строку, приемлемую для этих функций. В то время как $field содержит только символы, кроме преобразования типа, я не вижу других изменений в содержимом $field .
Новый компонент становится:
<div class="form-group">
<label for='{{$field}}'>{{$title}} @error(html_entity_decode($field)) - <span class='text-danger'> {{ $message }} </span> @enderror </label>
<input id='{{$field}}' name='{{$field}}' type="text" class='form-control{{ $errors->has(html_entity_decode($field)) ? ' is-invalid' : '' }}' placeholder='{{$placeholder}}' {{$attributes}} value='{{ old(html_entity_decode($field), $value) }}' >
</div>
Это решает проблему. Я не могу не думать, что это скорее упущение, когда Laravel обрабатывает этот случай.