自定义 laravel nova
2020-06-26 tech php laravel 4 mins 5 图 1694 字
原文:https://christoph-rumpel.com/2019/05/customizing-laravel-nova
Laravel 最新的产品 Nova 席卷了整个社区。无需时间即可构建简单后端的方法令人惊讶。但是,每个项目都是不同的,我们需要在各处调整 Nova,以使其适应我们的需求。在本文中,我想提供一些有关如何自定义 Laravel Nova 的有用提示。
一、列表页内容筛选
在索引视图中, 您可以查看所选资源的所有项目。在下面的示例中,您可以看到我所有的食谱。
但是有时您不想将所有这些都显示给用户。在我的示例中,我只想列出特定类别的食谱。
有一种简单的方法可以定义在索引列表上显示的内容。每个资源都扩展了基类Resource
类。在这里,您可以找到该indexQuery
方法。
// Inside /app/Nova/Resource.php
public static function indexQuery(NovaRequest $request, $query)
{
return $query;
}
您可以将此方法复制到自己的资源类中并覆盖它。这是我仅用来显示早餐食谱的内容。
// Inside /app/Nova/Recipe.php
public static function indexQuery(NovaRequest $request, $query)
{
return $query->where('category_id', 1);
}
只需自定义此查询即可仅在索引列表上显示您喜欢的内容。
二、取消关系字段上的超链接
默认情况下,关系字段提供到相关项目的链接。因此,当您dinner
从我的示例中单击时,将转到类别项目dinner
。
这是一个很酷的功能,但并不总是您想要的。例如,如果您不想将类别显示为资源,那么也可以跳过链接。在Nova的早期版本中,我需要重写Vue组件以删除链接。很高兴新增了名为的方法viewable
。
// Inside /app/Nova/Recipe.php
public function fields(Request $request)
{
return [
ID::make()->sortable(),
BelongsTo::make('Category', 'category', Category::class)
->viewable(false),
Text::make('name')
];
}
在我的食谱资源类中,我可以将类别字段设置为false
。这将删除链接。现在,我们的类别字段只是纯文本。
三、侧边栏隐藏资源
由于我们不想将食谱链接到其所属类别,因此也可以从导航中隐藏类别资源。这可以通过覆盖$displayInNavigation
配方资源中的属性来完成。
// Inside /app/Nova/Recipe.php
/**
* @var bool
*/
public static $displayInNavigation = false;
现在,我们不再在导航中看到类别资源。
四、使用一个资源字段表单输入的值来计算另一个
对于我的一个项目,我有一个新动作,客户可以批准一个事件,该事件发送电子邮件。该操作具有用于自定义批准电子邮件的基本内容的字段。提交操作后,我会发送一封包含自定义文本的电子邮件。
但是现在,客户希望在发送电子邮件之前先预览电子邮件。使用Laravel mailables可以很容易地显示电子邮件模板的预览。但是,使用操作字段中的自定义文本并在提交操作之前显示预览非常复杂。
最后,我使用了Kyle兄弟发布的包 Custom Calculated Field 中类似的方法,通过广播和侦听器字段来实现。在广播字段中输入值时,侦听器将通过Vue接收它。这样,就可以从操作表单中的自定义电子邮件文本创建电子邮件预览。
听起来可能比以前要容易一些,但是Kyle 写了一篇很棒的文章,其中详细解释了有关此方法的所有内容。