自定义 laravel nova

原文:https://christoph-rumpel.com/2019/05/customizing-laravel-nova

Laravel 最新的产品 Nova 席卷了整个社区。无需时间即可构建简单后端的方法令人惊讶。但是,每个项目都是不同的,我们需要在各处调整 Nova,以使其适应我们的需求。在本文中,我想提供一些有关如何自定义 Laravel 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);
}

只需自定义此查询即可仅在索引列表上显示您喜欢的内容。

Laravel Nova indexy view

二、取消关系字段上的超链接

默认情况下,关系字段提供到相关项目的链接。因此,当您dinner从我的示例中单击时,将转到类别项目dinner

Laravel Nova索引视图

这是一个很酷的功能,但并不总是您想要的。例如,如果您不想将类别显示为资源,那么也可以跳过链接。在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。这将删除链接。现在,我们的类别字段只是纯文本。

屏幕快照显示了Nova索引视图以及带有链接的关系字段

三、侧边栏隐藏资源

由于我们不想将食谱链接到其所属类别,因此也可以从导航中隐藏类别资源。这可以通过覆盖$displayInNavigation配方资源中的属性来完成。

// Inside /app/Nova/Recipe.php
/**
 * @var bool 
 */
public static $displayInNavigation = false;

现在,我们不再在导航中看到类别资源。

屏幕截图显示该类别不再在导航中列出

四、使用一个资源字段表单输入的值来计算另一个

对于我的一个项目,我有一个新动作,客户可以批准一个事件,该事件发送电子邮件。该操作具有用于自定义批准电子邮件的基本内容的字段。提交操作后,我会发送一封包含自定义文本的电子邮件。

但是现在,客户希望在发送电子邮件之前先预览电子邮件。使用Laravel mailables可以很容易地显示电子邮件模板的预览。但是,使用操作字段中的自定义文本并在提交操作之前显示预览非常复杂。

电子邮件预览的预览动画

最后,我使用了Kyle兄弟发布的包 Custom Calculated Field 中类似的方法,通过广播和侦听器字段来实现。在广播字段中输入值时,侦听器将通过Vue接收它。这样,就可以从操作表单中的自定义电子邮件文本创建电子邮件预览。

听起来可能比以前要容易一些,但是Kyle 写了一篇很棒的文章,其中详细解释了有关此方法的所有内容。


操作系统也是 CRUD - Jiajun的编程随想 【Calico系列】7 Calico ibgp 配置简述