Laravel Nova 基础
Laravel Nova 是一款 Laravel 应用程序的后台管理面板。当然,Nova 的主要功能是使用 Eloquent 管理底层数据库记录。Nova 通过在应用中定义一个与 Eloquent 模型对应的 Nova「资源」实现此目标。
定义资源
Nova 资源默认存储在应用的 app/Nova
文件夹。你可以使用 nova:resource
Artisan 命令生成一个新资源:
php artisan nova:resource Post
资源的基本属性是 model
属性。此属性告诉 Nova 该资源对应的 Eloquent 模型:
/**
* 资源对应的模型。
*
* @var string
*/
public static $model = 'App\Post';
新创建的 Nova 资源只包含一个 ID
字段定义。别担心,我们很快会为我们的资源添加更多字段。
注册资源
自动注册
默认地,
app/Nova
目录的所有资源由 Nova 自动注册。你无需手动注册它们。
资源在 Nova 管理面板中使用之前,必须先由 Nova 注册。资源一般在 app/Providers/NovaServiceProvider.php
文件里注册。该文件包含与 Nova 安装相关的各种配置和引导代码。
如上所述,你无需手动注册资源;但是,如果你选择手动注册,可以通过覆盖 NovaServiceProvider
的 resources
方法实现 。
手动注册资源有两种方法。可以使用 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 面板的侧栏中可用:
预加载
如果你经常需要在字段、资源标题 / 副标题 中访问资源关联,那么将此关联添加到资源的 with
属性里可能是个好主意。此属性指示 Nova 在检索资源时总是预加载列出的关联。
例如,如果你在一个 Post
资源的 subtitle
方法里访问此资源的 user
关联,你应该将 user
关联添加到 Post
资源的 with
属性里:
/**
* 在查询时应预加载的关联。
*
* @var array
*/
public static $with = ['user'];
资源事件
所有 Nova 操作都使用了你熟悉的 save
、delete
、forceDelete
、restore
Eloquent 方法。因此,监听 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()
{
//
}
}
如果只想在 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);
});
}
更多建议: