В настоящее время я изо всех сил пытаюсь заставить свои компоненты Laravel X-Jet работать.
Скажем, у меня есть форма с компонентом под названием <x-jet-input>.
Обычно, когда я использую этот компонент следующим образом:
<x-jet-input id = "name" name = "name" type = "text" class = "..." value = "{{ old('name', $team->name) }}" autofocus/>
HTML становится таким, когда я его запускаю:
<input class = "..." id = "name" name = "name" type = "text" value = "Output from PHP" autofocus = "autofocus">
Если я добавлю определенные параметры, интерполированные из PHP; Нравится disabled:
<x-jet-input id = "name" name = "name" type = "text" class = "..." value = "{{ old('name', $team->name) }}" {{ 'disabled' }} autofocus />
Отрендеренный вывод HTML внезапно становится таким:
<x-jet-input id = "name" name = "name" type = "text" class = "..." value = "Output from PHP" disabled = "" autofocus = ""></x-jet-input>
Весь элемент превратился в <x-jet-input> в необработанном HTML. Я не понимаю, почему, и в результате визуализированный вывод на странице совершенно нефункционален.
Вот как выглядит код компонента:
@props(['disabled' => false])
<input {{ $disabled ? 'disabled' : '' }} {!! $attributes->merge(['class' => '...']) !!}>
PS: Классы заменены на ... для удобства чтения.
Я также столкнулся с этой же проблемой с компонентом x-jet-checkbox. Пытаюсь использовать атрибут checked.
Что мне здесь не хватает?
Я попытался вручную добавить значение компонента props и закодировать соответствующее поведение непосредственно в компоненте (вместо того, чтобы полагаться на $attributes->merge()). Это имеет тот же результат. Это не меняет вывод.
Если я поставлю атрибут disabled в этом случае напрямую (без интерполяции PHP):
<x-jet-input id = "name" name = "name" type = "text" class = "..." value = "{{ old('name', $team->name) }}" disabled autofocus />
Все работает нормально, и HTML отображается как обычно:
<input disabled = "" class = "..." id = "name" name = "name" type = "text" value = "Output from PHP" autofocus = "autofocus">
Когда я использую интерполяцию PHP: я ожидаю, что она будет вести себя так же. Но это не так. Что мне здесь не хватает?






Я разместил эту же проблему на другом форуме, и кто-то дал мне указатель.
При работе с компонентами Blade: все, что интерполируется с помощью PHP, должно иметь префикс : перед именем атрибута.
Итак, мое решение очень простое:
<x-jet-input id = "name" name = "name" type = "text" class = "..." value = "{{ old('name', $team->name) }}" :disabled = "$disabled" autofocus />
См. документацию Laravel здесь для более подробной информации: https://laravel.com/docs/9.x/blade#passing-data-to-components