Laravel 8.15.0 /Jetstream — Как зарегистрировать новые лезвия x-jet-newblade?

#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. Как вы уже писали, это решение не выдержит обновления пакета.