Laravel 8.15.0/Jetstream - 如何注册新刀片 x-jet-newblade?
Posted
技术标签:
【中文标题】Laravel 8.15.0/Jetstream - 如何注册新刀片 x-jet-newblade?【英文标题】:Laravel 8.15.0/Jetstream - How to register new blades x-jet-newblade? 【发布时间】:2021-03-05 07:53:48 【问题描述】:我刚刚开始使用 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>
如果我使用与上面相同的代码但使用<x-jet-subform/>
而不是<x-jet-welcome>
在同一目录中创建一个新刀片(fe form.blade.php),它通常应该重定向到 subform.blade.php位于var/www/html/laravel/resources/views/vendor/jetstream/components/subform.blade.php
下
但如果我尝试访问该页面(在 web.php 设置路由之后),它会显示
无效参数异常 无法找到组件 [jet-subform] 的类或视图。
所以我认为有必要“注册”新刀片,但我发现没有办法这样做......
视图已经发布了
php artisan vendor:publish --tag=jetstream-views
【问题讨论】:
【参考方案1】:我在这里处理同样的问题,发现您的问题没有得到解答。 我找到的解决方案是创建自己的新 Blade 组件。 你可以这样做:
$ php artisan make:component MyComponent
这将创建两个新文件 /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>
希望对您有所帮助。来自巴西的问候:)
【讨论】:
感谢您的帮助!它对我有用,但我不知道为什么不能使用 Jetstream Blade 而不是“普通” Blade 组件。 在一个教程中,他声称您可以通过在views/components
文件夹中创建一个新的组件刀片文件来添加一个新组件,但我得到了那个错误:Unable to locate a class or view for component
。我真的必须执行make:component
。是否可以按照@operator 的要求通过添加一个新的刀片文件来完成?
有点希望我没有对此投反对票(抱歉),但我认为它并不能准确地回答这个问题,这似乎是 jetstream 特有的。我认为@Saravanakumar 提交的答案更准确。【参考方案2】:
我不确定在此处添加新的自定义 x-jet 组件是否正确或预期的方法,因为此方法可能无法在更新后继续存在,但您可以在此文件中注册新组件:
vendor/laravel/jetstream/src/JetstreamServiceProvider.php
.
将$this->registerComponent('subform');
添加到configureComponents 方法中,然后使用<x-jet-subform>
标签调用它
【讨论】:
正如您已经写的那样,此解决方案将无法在软件包更新后继续存在。【参考方案3】:您可以在位于app\Providers
文件夹的App\Providers\JetstreamServiceProvider.php
中注册您的Jetstream 叶片组件。
将以下辅助函数添加到文件中:
protected function registerComponent(string $component)
\Illuminate\Support\Facades\Blade::component('jetstream::components.'.$component, 'jet-'.$component);
然后在 register 函数中使用以下 sn-p 来注册你的 jetstream 叶片组件:
public function register()
$this->registerComponent('subform');
现在您可以使用自定义的 jetstream 组件了:
<x-jet-subform>
【讨论】:
这很有效,但刀片位置很重要。我必须把它放在 resources/views/vendor/jetstream/components 中才能被识别。 感谢您的回答。我不明白为什么必须手动完成。规划有更新吗?以上是关于Laravel 8.15.0/Jetstream - 如何注册新刀片 x-jet-newblade?的主要内容,如果未能解决你的问题,请参考以下文章