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>

如果我使用与上面相同的代码但使用&lt;x-jet-subform/&gt; 而不是&lt;x-jet-welcome&gt; 在同一目录中创建一个新刀片(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 引用它,如下所示: &lt;x-my-component&gt;&lt;/x-my-component&gt;

刀片组件代码应该是这样的

<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-&gt;registerComponent('subform'); 添加到configureComponents 方法中,然后使用&lt;x-jet-subform&gt; 标签调用它

【讨论】:

正如您已经写的那样,此解决方案将无法在软件包更新后继续存在。【参考方案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?的主要内容,如果未能解决你的问题,请参考以下文章

使用 laravel 安装程序创建 laravel 项目

Laravel:laravel 可翻译插件

win 怎么laravel命令

laravel 安装失败

laravel validator怎么验证整数

Laravel 图像规则验证不适用于 Laravel 8,但适用于 Laravel 7 |拉拉维尔 |图片 |验证