Laravel Nova 资源工具

2023-02-16 17:09 更新

总览

资源工具与 工具 很类似;然而,资源工具并不会显示在 Nova 的侧边栏,而是显示在特定的资源详情页。 与 Nova 工具一样,资源工具具有高度的可自定义性,并且主要由一个完全由你控制的单文件 Vue 组件构成。

定义工具

可以使用 Artisan 命令使用 nova:resource-tool 生成资源工具。默认情况下,所有新工具都将放置在应用程序的 nova-components 目录中。使用 nova:resource-tool 命令生成工具时,传递给该命令的工具名称应遵循 Composer 供应商/程序包格式。因此,如果我们要构建 Stripe 检查器工具,则可以运行以下命令:

artisan nova:resource-tool acme / stripe-in​​spector

生成工具时,Nova 会提示您安装工具的 NPM 依赖项,编译其资产并更新应用程序的 composer.json 文件。所有自定义工具都已在您的应用程序中注册为 Composer “路径” 存储库。

Nova 资源工具包括构建工具所需的所有支架。每个工具甚至都包含其自己的 composer.json 文件,并准备与 GitHub 上的世界或您选择的源代码控制提供商共享。

注册工具

Nova 资源工具可能已在资源的 fields 方法中注册。此方法返回资源可用的字段数组。要注册您的资源工具,请将您的工具添加到此方法返回的字段数组中:

use Acme\StripeInspector\StripeInspector;

/**
 * 获取资源显示的字段
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 * /
public function fields(Request $request)
{
    return [
        ID::make('ID', 'id')->sortable(),

        StripeInspector::make()->canSee(function ($request) {
            return false;
        }),
    ];
}

工具选项

通常,你应该允许工具的使用者可以自定义工具的配置选项。可以通过在工具类上公开方法来做到这一点。这些方法可以调用工具的基础 withMeta 方法,以将信息添加到工具的元数据中,该元数据将在您的 Tool.vue 组件中可用withMeta 方法接受键 / 值选项数组:

<?php

namespace Acme\StripeInspector;

use Laravel\Nova\ResourceTool;

class StripeInspector extends ResourceTool
{
    /**
     * 获取资源工具的显示名称
     *
     * @return string
     */
    public function name()
    {
        return 'Stripe Inspector';
    }

    /**
     * 表示条纹检查员应允许退款
     *
     * @return $this
     */
    public function issuesRefunds()
    {
        return $this->withMeta(['issuesRefunds' => true]);
    }

    /**
     * 获取资源工具的组件名称
     *
     * @return string
     */
    public function component()
    {
        return 'stripe-inspector';
    }
}

建筑工具

Nova 生成的每个工具都包括其自己的服务提供商和 “工具” 类。以 stripe-in​​spector 工具为例,该工具类位于 src / StripeInspector.php

该工具的服务提供程序也位于该工具的 src 目录中,并且已在该工具的 composer.json 文件中注册,以便可以由 Laravel 框架自动加载。

授权

如果您只想将给定工具公开给某些用户,则可以将 canSee 方法链接到工具的注册上。canSee 方法接受一个闭包,该闭包应返回 true 或 false。闭包将收到传入的 HTTP 请求:

使用Acme \ StripeInspector \ StripeInspector;

/ **
 *获取资源显示的字段。
 *
 * @param \ Illuminate \ Http \ Request $ request
 * @返回数组
 * /
公共功能字段(请求$ request)
{
    返回[
        ID :: make('ID','id')-> sortable(),

        StripeInspector :: make()-> canSee(function($ request){
            返回false;
        }),
    ];
}

路由

通常,您将需要定义工具调用的 Laravel 路线。 Nova 生成您的工具时,它会创建一个 routes / api.php 路由文件。如果需要,您可以使用此文件来定义工具所需的任何路径。

工具的 ToolServiceProvider 在路由组内自动定义此文件中的所有路由。路由组指定该组内的所有路由应接收 / nova-vendor / tool-name 前缀,其中 tool-name 是工具的 “kebab-case” 名称。因此,例如, / nova-vendor / stripe-in​​spector。您可以随意修改此路由组定义,但要确保您的 Nova 工具将与其他 Nova 软件包共存。

路由授权

在为您的工具构建路由时,您应该始终 使用 Laravel 门或策略向这些路由添加授权

资产

Nova 生成您的工具时,将为您生成 resources / js 和 resources / sass 目录。这些目录包含工具的 JavaScript 和 Sass 样式表。这些目录中感兴趣的主要文件是:resources / js / components / Tool.vue 和 resources / sass / tool.scss

Tool.vue 文件是包含工具前端的单文件 Vue 组件。您可以根据需要从该文件中自由构建工具。您的工具可以使用 Axios 发出 HTTP 请求,Axios 可以在全球使用。另外,moment.js 和 underscore.js 库是全局可用的。

资源工具属性

资源工具的 Tool.vue 组件将接收多个 VuepropsresourceNameresourceId 和 fieldresourceId 属性包含工具当前附加到的资源的主键。向控制器发出请求时,可以使用 resourceIdfield 属性提供对可能可用的任何工具 选项 的访问:

const issueRefunds = this.field.issuesRefunds;

注册资产

您的 Nova 工具的服务提供商会注册您工具的已编译资产,以便它们可用于 Nova 前端:

/ **
 *引导所有应用程序服务。
 *
 * @返回无效
 * /
公共功能boot()
{
    $ this-> app-> booted(function(){
        $ this-> routes();
    });

    Nova :: serving(function(ServingNova $ event){
        Nova :: script('stripe-inspector',__DIR __。'/ .. / dist / js / tool.js');
        Nova :: style('stripe-inspector',__DIR __。'/ .. / dist / css / tool.css');
    });
}

JavaScript 引导程序和路由

您的组件被引导并注册在 resources / js / tool.js 文件中。您可以根据需要随意修改此文件或在此处注册其他组件。

编译资源

Nova 创建资源工具的同时生成一个 webpack.mix.js 文件。你可以使用 NPM dev 和 prod 命令进行构建:

// 在本地开发环境下编译资源...
npm run dev

// 编译并压缩资源...
npm run prod

此外,你还可以运行 NPM watch 命令在文件改动时自动编译:

npm run watch


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号