Laravel 8.15.0/Jetstream - 如何注册新刀片x-jet-newblade?

Laravel 8.15.0/Jetstream - How to register new blades 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>

如果我在同一目录 (f.e. form.blade.php) 中使用与上面相同的代码但使用 <x-jet-subform/> 而不是 <x-jet-welcome> 它通常应该重定向到位于 var/www/html/laravel/resources/views/vendor/jetstream/components/subform.blade.php

下的 subform.blade.php

但如果我尝试访问该页面(在 web.php 设置路由后),它会显示

InvalidArgumentException
Unable to locate a class or view for component [jet-subform].

所以我认为有必要“注册”新的 blade,但我找不到办法...

视图已发布

php artisan vendor:publish --tag=jetstream-views

我在这里处理同样的问题,发现你的问题没有答案。 我找到的解决方案是创建我自己的新 Blade 组件。 您可以使用:

$ php artisan make:component MyComponent

这将创建两个新文件 /resources/views/components/my-component.blade.php 和 /app/View/Components/MyComponent.php。 现在你只需要在 blade 文件上构建你的组件并使用 x-tag 引用它,如下所示: <x-my-component></x-my-component>

这就是 blade 组件代码的样子

<button {{ $attributes->merge(['type' => 'button', 'class' => 'some-classes']) }}> {{ $slot }} </button>

希望对您有所帮助。来自巴西的问候:)

我不确定在此处添加新的自定义 x-jet 组件是否是正确的或预期的方式,因为此方法可能无法在更新后继续存在,但您可以在此文件中注册新组件:

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

添加,$this->registerComponent('subform');到configureComponents方法,然后用<x-jet-subform>标签调用

您可以在 app\Providers 文件夹中的 App\Providers\JetstreamServiceProvider.php 中注册 jetstream blade 组件。

将以下辅助函数添加到文件中:

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

然后在注册函数中使用以下代码片段注册您的 jetstream blade 组件:

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

现在您可以使用自定义 jetstream 组件:

<x-jet-subform>