Laravel Nova 卡片
概述
卡片类似于资源工具,但却是一种更小、更微型的工具,它们可以被放置在仪表盘中,用来显示或提示各类资源的简要信息或明细信息。事实上,如果你已经使用过 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
更多建议: