Nova 4 继续改进 Nova 3.x,引入了基于 Tailwind 2、Vue 3 和 Inertia.js 构建的全面更新的响应式设计。别担心 - 它支持暗模式。
此外,Nova 4 还引入了对可折叠关系、轻松品牌化、通知、操作回调、新字段、相关字段、可过滤字段、自定义菜单、新指标、可批处理操作、搜索改进等功能的支持。
Nova 4 引入了全面更新的用户界面,现在完全响应,因此您可以随时随地管理数据
而且,根据普遍要求,Nova 界面现在支持“暗模式”
nova
配置文件中添加了一个新的 brand
配置选项,允许您轻松自定义 Nova 界面中使用的“主色”和徽标,而无需创建自定义 Nova “主题”
要了解更多信息,请查看 品牌化文档。
Nova 4 允许您折叠给定资源类型的关系,以便在查看关系时不再默认加载它们。Nova 会将您折叠的关系存储在浏览器的本地存储中,以便 Nova 可以记住您的偏好设置。我们认为,当查看具有几十个关系的资源类型时,可折叠关系将带来显著的性能提升
新的 Action::then
方法允许您在操作针对其所有选定资源执行完毕后轻松执行代码。此功能允许您在操作执行完毕后轻松生成报告或发送通知
/**
* Get the actions available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function actions(NovaRequest $request)
{
return [
(new Actions\EmailAccountProfile)->then(function ($models) {
$models->each(function ($model) {
//
});
}),
];
}
操作现在可以利用 Laravel 的 作业批处理 功能,提供注册批处理回调的功能,以便在整个操作批处理执行完毕后执行其他任务
use Illuminate\Bus\Batch;
use Throwable;
/**
* Prepare the given batch for execution.
*
* @param \Laravel\Nova\Fields\ActionFields $fields
* @param \Illuminate\Bus\PendingBatch $batch
* @return void
*/
public function withBatch(ActionFields $fields, PendingBatch $batch)
{
$batch->then(function (Batch $batch) {
// All jobs completed successfully...
$selectedModels = $batch->resourceIds;
})->catch(function (Batch $batch, Throwable $e) {
// First batch job failure detected...
})->finally(function (Batch $batch) {
// The batch has finished executing...
});
}
要了解有关如何使操作可批处理的更多信息,请参阅 操作批处理文档。
Nova 4 引入了多种新的字段类型,包括 Color
、UiAvatar
、MultiSelect
和 URL
。有关如何使用这些字段的更多信息,请查阅 字段文档。
Nova 4 还引入了对“依赖”字段的支持。新的 dependsOn
方法允许你指定一个字段的配置依赖于一个或多个其他字段的值。dependsOn
方法接受一个依赖字段属性的 array
和一个修改当前字段实例配置的闭包。
依赖字段允许高级自定义,例如根据另一个字段的状态切换只读模式、验证规则等
use Laravel\Nova\Fields\FormData;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
Select::make('Purchase Type', 'type')
->options([
'personal' => 'Personal',
'gift' => 'Gift',
]),
// Recipient field configuration is customized based on purchase type...
Text::make('Recipient')
->readonly()
->dependsOn(
['type'],
function (Text $field, NovaRequest $request, FormData $formData) {
if ($formData->type === 'gift') {
$field->readonly(false)->rules(['required', 'email']);
}
}
),
要了解更多信息,请查阅 依赖字段文档。
Nova 4 引入了一个新的 filterable
方法,它允许你为资源、关系和透镜上的给定字段启用方便的自动 过滤 功能,而无需创建自定义过滤器。Nova 生成的过滤器将自动通过资源的索引上的资源过滤器菜单提供
DateTime::make('Created At')->filterable(),
要了解更多信息,请查阅 可过滤字段文档。
Nova 4 还引入了对“Nova 通知”的支持,这是 Nova 中一个全新的通知菜单,你可以用它为你的 Nova 用户显示信息。例如,你可以使用此菜单通知用户报告已生成或发票需要关注
要发送 Nova 通知,你只需将 NovaNotification
实例传递给可通知用户
use Laravel\Nova\Notifications\NovaNotification;
$request->user()->notify(
NovaNotification::make()
->message('Your report is ready to download.')
->action('Download', 'https://example.com/report.pdf')
->icon('download')
->type('info')
);
要了解有关 Nova 通知的更多信息,请查阅全面的 通知文档。
在将你的应用程序部署到生产环境后,你可能偶尔需要“模拟”你的应用程序的另一个用户,以便调试你的客户报告的问题。值得庆幸的是,Nova 现在包括内置功能来处理此确切场景。
要启用用户模拟,请将 Laravel\Nova\Auth\Impersonatable
特性添加到你的应用程序的 User
模型
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Impersonatable, Notifiable;
// ...
}
将 Impersonatable
特征添加到应用程序的 User
模型后,将通过相应资源的内联操作菜单提供“模拟”操作
此外,Nova 现在支持完全自定义的侧边栏和用户菜单。事实上,您可以完全自定义 Nova 左侧导航栏中的每个链接条目,包括创建菜单部分、菜单组等
要了解有关构建自己的自定义菜单的更多信息,请参阅 自定义菜单文档。
新的“进度”指标允许您跟踪您对给定目标的进度。例如,您可能希望跟踪您本月的新用户注册量与目标目标相比。使用新的进度指标很容易
要了解有关构建和定义指标的更多信息,请参阅 指标文档。
有时,您可能希望创建一个新资源,同时使用现有资源中的所有数据作为起点。Nova 的新资源复制功能就是这样做的。单击复制按钮后,您将被带到一个资源创建表单,其中所有复制的资源数据都已注入到表单中并准备好进行调整
全新的资源预览模态让您在不离开资源索引页面的情况下快速浏览资源数据,提供了一种在不中断流程的情况下了解有关资源的更多信息的好方法
要了解有关向资源预览模态添加字段的更多信息,请查看 字段文档。
HasOne
关系字段现在可以使用 ofMany
方法转换为“多对一”Eloquent 关系。例如,假设一个 User
模型 hasMany
Post
模型。我们可以像这样将“多对一”关系添加到我们的 User
Nova 资源中
use App\Nova\Post;
use Laravel\Nova\Fields\HasOne;
HasOne::ofMany('Latest Post', 'latestPost', Post::class),
当然,“多对多”关系也受支持
use App\Nova\Comment;
use Laravel\Nova\Fields\MorphOne;
MorphOne::ofMany('Latest Comment', 'latestComment', Comment::class),
具有 HasOne
关系的资源现在可以在父资源的创建表单中直接创建这些关系的数据。这种新功能使创建父资源及其子资源变得轻而易举,只需一个便捷的操作
通常,Nova 使用简单的 LIKE
子句搜索数据库列。但是,如果你使用的是 MySQL 或 Postgres,你现在可以利用你定义的任何全文索引
use Laravel\Nova\Query\Search\SearchableText;
/**
* Get the searchable columns for the resource.
*
* @return array
*/
public static function searchableColumns()
{
return ['id', new SearchableText('title')];
}
此外,Nova 4 甚至允许你在资源的关系和 JSON 列中进行搜索
use Laravel\Nova\Query\Search\SearchableJson;
use Laravel\Nova\Query\Search\SearchableRelation;
public static function searchableColumns()
{
return [
'id',
new SearchableRelation('author', 'name')
new SearchableJson('meta->tag')
];
}
要详细了解 Nova 的搜索功能,请参阅 综合搜索文档。