#php #laravel #laravel-blade #laravel-8 #jetstream
#php #laravel #laravel-blade #laravel-8 #струйный поток
Вопрос:
Я только делаю свои самые первые шаги с Laravel 8 и обнаружил проблему, которую не могу решить.
/var/www/html/laravel/resources/views/dashboard.blade.php
:
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-xl sm:rounded-lg">
<x-jet-welcome />
</div>
Если я создам новый блейд в том же каталоге (например, в form.blade.php ) с тем же кодом, что и выше, но с <x-jet-subform/>
вместо <x-jet-welcome>
него обычно следует перенаправлять на subform.blade.php который находится под var/www/html/laravel/resources/views/vendor/jetstream/components/subform.blade.php
Но если я попытаюсь перейти на эту страницу (после установки маршрута в web.php ) в нем говорится
InvalidArgumentException
Не удается найти класс или представление для компонента [jet-subform].
Поэтому я думаю, что необходимо «зарегистрировать» новые лезвия, но я не нашел способа сделать это…
Представление уже опубликовано с
php artisan vendor:publish --tag=jetstream-views
Ответ №1:
Вы можете зарегистрировать свои компоненты jetstream blade в AppProvidersJetstreamServiceProvider.php
папке, расположенной в appProviders
папке.
Добавьте в файл следующую вспомогательную функцию:
protected function registerComponent(string $component) {
IlluminateSupportFacadesBlade::component('jetstream::components.'.$component, 'jet-'.$component);
}
Затем используйте следующий фрагмент в функции register, чтобы зарегистрировать ваши компоненты jetstream blade:
public function register() {
$this->registerComponent('subform');
}
Теперь вы можете использовать свой пользовательский компонент jetstream:
<x-jet-subform>
Комментарии:
1. Это сработало хорошо, но расположение лезвия очень важно. Мне пришлось поместить его в resources / views / vendor / jetstream /components, чтобы он был распознан.
2. Спасибо за этот ответ. Я не понимаю, почему это нужно делать вручную. Есть ли какие-то изменения в планировании?
3. Они должны включить эту часть в документацию jetstream IMO
Ответ №2:
Я имел дело с той же проблемой здесь и нашел ваш вопрос без ответа. Решение, которое я нашел, состояло в том, чтобы создать свой собственный новый компонент Blade. Вы можете сделать это с помощью:
$ php artisan make:component MyComponent
Это создаст два новых файла /resources/views/components/my-component.blade.php и /app/View/Components/MyComponent.php .
Теперь вам просто нужно создать свой компонент на основе этого файла блейда и ссылаться на него, используя x-тег следующим образом:
<x-my-component></x-my-component>
Вот как должен выглядеть код блейд-компонента
<button {{ $attributes->merge(['type' => 'button', 'class' => 'some-classes']) }}> {{ $slot }} </button>
Надеюсь, это поможет. Привет из Бразилии 🙂
Комментарии:
1. Спасибо за вашу помощь! У меня это сработало, но я понятия не имею, почему невозможно использовать Jetstream Blade вместо «обычного» компонента Blade.
2. В учебном пособии он утверждает, что вы можете добавить новый компонент, создав новый файл блейда компонента внутри
views/components
папки, но я получаю эту ошибку:Unable to locate a class or view for component
. Мне действительно нужно выполнятьmake:component
. Можно ли это просто сделать, добавив новый файл блейда, как запрашивает @operator?3. Жаль, что я не проголосовал за это (извините), но я не думаю, что это дает точный ответ на вопрос, который кажется специфичным для jetstream. Я думаю, что ответ, представленный @Saravanakumar, более точен.
Ответ №3:
Я не уверен, является ли это правильным или предполагаемым способом добавления новых пользовательских компонентов x-jet здесь, поскольку этот метод может не выдержать обновления, но вы можете зарегистрировать новые компоненты в этом файле:
vendor/laravel/jetstream/src/JetstreamServiceProvider.php
.
Добавьте, $this->registerComponent('subform');
к методу configureComponents, а затем вызовите его с <x-jet-subform>
тегом
Комментарии:
1. Как вы уже писали, это решение не выдержит обновления пакета.