Laravel Nova 基礎(chǔ)

2023-02-16 17:07 更新

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

定義資源

Nova 資源默認(rèn)存儲在應(yīng)用的 app/Nova 文件夾。你可以使用 nova:resourceArtisan 命令生成一個(gè)新資源:

php artisan nova:resource Post

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

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

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

注冊資源

自動注冊

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

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

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

手動注冊資源有兩種方法??梢允褂?nbsp;resourcesIn 方法指示 Nova 注冊給定目錄中所有的 Nova 資源。或者,也可以使用 resources 方法手動注冊單個(gè)(或幾個(gè))資源:

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

/**
 * 注冊應(yīng)用程序的 Nova 資源。
 *
 * @return void
 */
protected function resources()
{
    Nova::resourcesIn(app_path('Nova'));

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

一旦你的資源用 Nova 注冊完畢,它們將在 Nova 面板的側(cè)欄中可用:


預(yù)加載

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

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

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

資源事件

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

<?php

namespace App\Providers;

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

class AppServiceProvider extends ServiceProvider
{
    /**
     * 啟動所有應(yīng)用服務(wù)。
     *
     * @return void
     */
    public function boot()
    {
        User::observe(UserObserver::class);
    }

    /**
     * 注冊此服務(wù)提供者。
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

如果只想在 Nova 相關(guān)的 HTTP 請求期間綁定觀察者,你可以在應(yīng)用的 NovaServiceProvider 服務(wù)提供者里注冊一個(gè) Nova::serving 事件監(jiān)聽:

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

/**
 * 啟動所有服務(wù)。
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Nova::serving(function () {
        User::observe(UserObserver::class);
    });
}


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號