Laravel Nova 是一款 Laravel 應用程序的后臺管理面板。當然,Nova 的主要功能是使用 Eloquent 管理底層數(shù)據(jù)庫記錄。Nova 通過在應用中定義一個與 Eloquent 模型對應的 Nova「資源」實現(xiàn)此目標。
Nova 資源默認存儲在應用的 app/Nova
文件夾。你可以使用 nova:resource
Artisan 命令生成一個新資源:
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
、restore
Eloquent 方法。因此,監(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);
});
}
更多建議: