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

ope*_*tor 5 php laravel laravel-blade laravel-8 laravel-jetstream

我只是在用 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>
Run Code Online (Sandbox Code Playgroud)

如果创建在同一目录中一个新的刀片(FE的form.blade.php)具有相同的代码如上但<x-jet-subform/>代替<x-jet-welcome>它通常应重定向到位于下subform.blade.phpvar/www/html/laravel/resources/views/vendor/jetstream/components/subform.blade.php

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

InvalidArgumentException
无法找到组件 [jet-subform] 的类或视图。

所以我认为有必要“注册”新刀片,但我发现没有办法做到这一点......

该视图已发布

php artisan vendor:publish --tag=jetstream-views
Run Code Online (Sandbox Code Playgroud)

小智 8

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

$ php artisan make:component MyComponent
Run Code Online (Sandbox Code Playgroud)

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

这就是刀片组件代码的样子

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

希望能帮助到你。来自巴西的问候 :)


小智 8

您可以App\Providers\JetstreamServiceProvider.phpapp\Providers文件夹中注册您的 jetstream 叶片组件。

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

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

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

public function register() {
    $this->registerComponent('subform');
}
Run Code Online (Sandbox Code Playgroud)

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

<x-jet-subform>
Run Code Online (Sandbox Code Playgroud)

  • 这很有效,但刀片位置很重要。我必须将其放在资源/视图/供应商/jetstream/组件中才能识别它。 (2认同)