翻译进度
7
分块数量
2
参与人数

基础

这是一篇社区协同翻译的文章,你可以点击右边区块信息里的『改进』按钮向译者提交改进建议。

Laravel Nova 是一款 Laravel 应用程序的后台管理面板。当然,Nova 的主要功能是使用 Eloquent 管理底层数据库记录。Nova 通过在应用中定义一个与 Eloquent 模型对应的 Nova「资源」实现此目标。

mingc 翻译于 2个月前

定义资源

Nova 资源默认存储在应用的app/Nova文件夹。你可以使用nova:resourceArtisan 命令生成一个新资源:

php artisan nova:resource Post

资源的基本属性是model属性。此属性告诉 Nova 该资源对应的 Eloquent 模型:

/**
 * 资源对应的模型。
 *
 * @var string
 */
public static $model = 'App\Post';

新创建的 Nova 资源只包含一个ID字段定义。别担心,我们很快会为我们的资源添加更多字段。

mingc 翻译于 2个月前

注册资源

自动注册

默认地,app/Nova目录的所有资源由 Nova 自动注册。你无需手动注册它们。

资源在 Nova 管理面板中使用之前,必须先由 Nova 注册。资源一般在app/Providers/NovaServiceProvider.php文件里注册。该文件包含与 Nova 安装相关的各种配置和引导代码。

如上所述,你无需手动注册资源;但是,如果你选择手动注册,可以通过覆盖NovaServiceProviderresources方法实现

mingc 翻译于 2个月前

手动注册资源有两种方法。可以使用resourcesIn方法指示 Nova 注册给定目录中所有的 Nova 资源。或者,也可以使用resources 方法手动注册单个(或几个)资源:

use App\Nova\User;
use App\Nova\Post;

/**
 * 注册应用程序的 Nova 资源。
 *
 * @return void
 */
protected function resources()
{
    Nova::resourcesIn(app_path('Nova'));

    Nova::resources([
        User::class,
        Post::class,
    ]);
}

一旦你的资源用 Nova 注册完毕,它们将在 Nova 面板的侧栏中可用:

Nova Dashboard

mingc 翻译于 2个月前

预加载

如果你经常需要在字段、资源标题 / 副标题 中访问资源关联,那么将此关联添加到资源的with属性里可能是个好主意。此属性指示 Nova 在检索资源时总是预加载列出的关联。

例如,如果你在一个Post资源的subtitle方法里访问此资源的user关联,你应该将user关联添加到Post资源的with属性里:

/**
 * 在查询时应预加载的关联。
 *
 * @var array
 */
public static $with = ['user'];
mingc 翻译于 2个月前

资源事件

所有 Nova 操作都使用了你熟悉的savedeleteforceDeleterestoreEloquent 方法。因此,监听 Nova 触发的模型事件并作出响应非常容易。最简单的办法是直接给模型绑定一个 观察者

<?php

namespace App\Providers;

use App\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * 启动所有应用服务。
     *
     * @return void
     */
    public function boot()
    {
        User::observe(UserObserver::class);
    }

    /**
     * 注册此服务提供者。
     *
     * @return void
     */
    public function register()
    {
        //
    }
}
mingc 翻译于 2个月前

如果只想在 Nova 相关的 HTTP 请求期间绑定观察者,你可以在应用的NovaServiceProvider服务提供者里注册一个Nova::serving事件监听:

use App\User;
use Laravel\Nova\Nova;
use App\Observers\UserObserver;

/**
 * 启动所有服务。
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Nova::serving(function () {
        User::observe(UserObserver::class);
    });
}
mingc 翻译于 2个月前

本文章首发在 Laravel China 社区
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

参与译者:2
讨论数量: 0
发起讨论


暂无话题~