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

Я просто делаю свои первые шаги с 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

person operator    schedule 22.11.2020    source источник


Ответы (3)


Здесь я столкнулся с той же проблемой и нашел ваш вопрос без ответа. Решение, которое я нашел, заключалось в создании моего собственного нового компонента 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>

Надеюсь, это поможет. Привет из Бразилии :)

person Isaac Pontes    schedule 26.11.2020
comment
Спасибо за вашу помощь! У меня это сработало, но я понятия не имею, почему нельзя использовать Jetstream Blade вместо обычного компонента Blade. - person operator; 27.11.2020
comment
В руководстве он утверждает, что вы можете добавить новый компонент, создав новый файл лезвия компонента внутри папки views/components, но я получаю эту ошибку: Unable to locate a class or view for component. Неужели мне действительно нужно выполнять make:component. Можно ли это просто сделать, добавив новый файл лезвия, как того требует @operator? - person Pathros; 15.12.2020
comment
Хотелось бы, чтобы я не проголосовал против этого (извините), но я не думаю, что он дает ответ на вопрос, который кажется специфичным для Jetstream. Я думаю, что ответ, представленный @Saravanakumar, более точен. - person bfuzze; 28.02.2021

Вы можете зарегистрировать свои блейд-компоненты Jetstream в App\Providers\JetstreamServiceProvider.php, расположенном в app\Providers папке.

Добавьте в файл следующую вспомогательную функцию:

protected function registerComponent(string $component) {
    \Illuminate\Support\Facades\Blade::component('jetstream::components.'.$component, 'jet-'.$component);
}

Затем используйте следующий фрагмент в функции регистрации, чтобы зарегистрировать компоненты лезвия Jetstream:

public function register() {
    $this->registerComponent('subform');
}

Теперь вы можете использовать свой собственный компонент Jetstream:

<x-jet-subform>
person Saravanakumar    schedule 22.01.2021
comment
Это сработало хорошо, но важно расположение лезвия. Мне пришлось поместить его в resources / views / vendor / jetstream / components, чтобы он был распознан. - person bfuzze; 28.02.2021

Я не уверен, правильный ли это или предполагаемый способ добавления здесь новых пользовательских компонентов x-jet, поскольку этот метод может не пережить обновление, но вы можете зарегистрировать новые компоненты в этом файле:

vendor/laravel/jetstream/src/JetstreamServiceProvider.php.

Добавьте $this->registerComponent('subform'); в метод configureComponents, а затем вызовите его с тегом <x-jet-subform>

person endroo    schedule 01.01.2021
comment
Как вы уже писали, это решение не выдержит обновления пакета. - person codedge; 17.01.2021