Компоненты Laravel X-Jet отображают HTML как <x-jet-component> напрямую при интерполяции параметров на них, проанализированных из PHP

В настоящее время я изо всех сил пытаюсь заставить свои компоненты 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: я ожидаю, что она будет вести себя так же. Но это не так. Что мне здесь не хватает?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я разместил эту же проблему на другом форуме, и кто-то дал мне указатель.

При работе с компонентами 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

Другие вопросы по теме