Laravel Nova 卡片

2023-02-16 17:09 更新

概述

卡片类似于资源工具,但却是一种更小、更微型的工具,它们可以被放置在仪表盘中,用来显示或提示各类资源的简要信息或明细信息。事实上,如果你已经使用过 Nova metrics 的话,说明你已经尝试过卡片。同时,可以通过自定义卡片来创建属于你自己的资源工具。

定义卡片

卡片可以使用 Artisan 命令 nova:card 来创建。默认情况下,所有新创建的卡片都将被保持在你应用根目录下的 nova-components 文件夹中。当使用 Artisan 命令 nova:card 创建卡片时,所传递的卡片名称因遵从 Composer  vendor/package 格式。因此,如果我们要创建一个叫『流量分析』的卡片时,我们应该运行如下命令:

artisan nova:card acme/analytics

生成卡片时,Nova 讲提示你去安装卡片所需要的 npm 依赖包,编译资源,和更新项目的 composer.json 文件。所有的自定义卡片都会通过 Composer "path" 仓库注册到你的应用。

Nova 卡包括构建卡所需的所有脚手架。每张卡甚至都包含其自己 composer.json 文件,并可以在 GitHub 或您选择的源代码控制提供商上与世界共享。

注册卡片

Nova 卡片可以在你的 Resource 类中的 cards 方法中注册。此方法返回资源可用的卡片数组。将你的卡片添加到由这个方法返回的卡片数组中,对卡片进行注册:

use Acme\Analytics\Analytics;

/**
 * 获取可用的资源卡片.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function cards(Request $request)
{
    return [new Analytics];
}

卡片选项

通常,您需要允许您卡片的消费者自定义卡上的运行时配置选项。您可以通过在您的 card 类中公开方法来实现这一点。这些方法可能会调用卡片的底层 withMeta 方法来添加信息到卡片的元数据中,这些元数据将应用在您的 Card.vue 的组件。withMeta 方法接受一个 键 / 值 选项数组:

<?php

namespace Acme\Analytics;

use Laravel\Nova\Card;

class Analytics extends Card
{
    /**
     * 卡片的宽度(1/3, 1/2, or full)。
     *
     * @var string
     */
    public $width = '1/3';

    /**
     * 指示分析应该显示当前的访问者。
     *
     * @return $this
     */
    public function currentVisitors()
    {
        return $this->withMeta(['currentVisitors' => true]);
    }

    /**
     * 获取卡片的组件名称。
     *
     * @return string
     */
    public function component()
    {
        return 'analytics';
    }
}

构建卡片

Nova 生成的每张卡片都包含自己的服务提供商和 “卡片” 类,以使用 analytics 卡片为例,卡片类位于 src/Analytics.php

卡片的服务提供者也位于卡片的 src 目录中,并在卡片的 composer.json 文件中注册,以便 Laravel 框架自动加载。

授权

如果您只想向特定用户公开指定的卡片,可以将 canSee 方法链到您指定的卡片上。canSee 方法接受一个闭包,该闭包应该返回 true 或 false。闭包将接收传入的 HTTP 请求:

use Acme\Analytics\Analytics;

/**
 * 获得可用的资源卡片.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function cards(Request $request)
{
    return [
        (new Analytics)->canSee(function ($request) {
            return false;
        }),
    ];
}

路由

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

此文件中的所有路由都由您卡片的 CardServiceProvider 在路由组内自动定义。路由组指定组内所有路由都应接收 /nova-vendor/card-name 前缀,其中 card-name 是您卡片的「kebab-case」名称。例如,/nova-vendor/analytics。您可以自由的修改此路由组的定义, 但请务必确保您的 Nova 卡片与其他 Nova 包共存。

路由授权

当为您的卡片创建路由时,您应该 始终 使用 Laravel 的 gates 或 policies 为这些路由添加授权。

Assets

当 Nova 生成卡片时,会为您生成 resources/js 和 resources/sass 目录。这些目录包含您的卡片的 JavaScript 和 Sass 样式表。这些目录中最感兴趣的文件主要是:resources/js/components/Card.vue 和 resources/sass/card.scss

Card.vue 文件是一个包含卡片前端的单文件 Vue 组件。从这文件中,您可以随意构建你想要的卡片。您的卡片可以使用 Axios 发起 HTTP 请求,它是全局可用的。此外,moment.js 和 underscore.js 库也是全局可用。

卡片属性

您卡片的 Card.vue 组件接收一个 卡片 Vue prop。此属性提供对任何可用卡片 选项 的访问:

const issuesRefunds = this.card.issuesRefunds;

注册 Assets

Nova 卡片的服务提供注册您卡片编译的 assets,以便 Nova 前端可以使用它们:

/**
 * 引导任何应用程序服务。
 *
 * @return void
 */
public function boot()
{
    $this->app->booted(function () {
        $this->routes();
    });

    Nova::serving(function (ServingNova $event) {
        Nova::script('{{ component }}', __DIR__.'/../dist/js/card.js');
        Nova::style('{{ component }}', __DIR__.'/../dist/css/card.css');
    });
}

JavaScript 引导 & 路由

您组件在 resources/js/card.js 文件中被引导和注册。您可以根据需要自由修改此文件或在此注册其他组件。

编译资源

Nova 创建卡片的同时生成一个 webpack.mix.js 文件。你可以使用 NPM dev 和 prod 命令构建卡片:

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

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

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

npm run watch


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

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号