Laravel Nova 基礎

2023-02-16 17:07 更新

Laravel Nova 是一款 Laravel 應用程序的后臺管理面板。當然,Nova 的主要功能是使用 Eloquent 管理底層數(shù)據(jù)庫記錄。Nova 通過在應用中定義一個與 Eloquent 模型對應的 Nova「資源」實現(xiàn)此目標。

定義資源

Nova 資源默認存儲在應用的 app/Nova 文件夾。你可以使用 nova:resourceArtisan 命令生成一個新資源:

php artisan nova:resource Post

資源的基本屬性是 model 屬性。此屬性告訴 Nova 該資源對應的 Eloquent 模型:

/**
 * 資源對應的模型。
 *
 * @var string
 */
public static $model = 'App\Post';

新創(chuàng)建的 Nova 資源只包含一個 ID 字段定義。別擔心,我們很快會為我們的資源添加更多字段。

注冊資源

自動注冊

默認地,app/Nova 目錄的所有資源由 Nova 自動注冊。你無需手動注冊它們。

資源在 Nova 管理面板中使用之前,必須先由 Nova 注冊。資源一般在 app/Providers/NovaServiceProvider.php 文件里注冊。該文件包含與 Nova 安裝相關的各種配置和引導代碼。

如上所述,你無需手動注冊資源;但是,如果你選擇手動注冊,可以通過覆蓋 NovaServiceProvider 的 resources 方法實現(xiàn) 。

手動注冊資源有兩種方法。可以使用 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 面板的側欄中可用:


預加載

如果你經(jīng)常需要在字段、資源標題 / 副標題 中訪問資源關聯(lián),那么將此關聯(lián)添加到資源的 with 屬性里可能是個好主意。此屬性指示 Nova 在檢索資源時總是預加載列出的關聯(lián)。

例如,如果你在一個 Post 資源的 subtitle 方法里訪問此資源的 user 關聯(lián),你應該將 user 關聯(lián)添加到 Post 資源的 with 屬性里:

/**
 * 在查詢時應預加載的關聯(lián)。
 *
 * @var array
 */
public static $with = ['user'];

資源事件

所有 Nova 操作都使用了你熟悉的 save、delete、forceDelete、restoreEloquent 方法。因此,監(jiān)聽 Nova 觸發(fā)的模型事件并作出響應非常容易。最簡單的辦法是直接給模型綁定一個 觀察者 。

<?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 事件監(jiān)聽:

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);
    });
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號