Laravel Nova 安裝與啟用指南(以 3.22.0 為例)

介紹

用途

Laravel Nova 是 Laravel 官方推出的後台管理面板 (Admin Panel),專門用來管理 Laravel 應用程式的資料。它提供直覺且強大的 UI,讓開發者快速建立後台,不需手動開發 CRUD 介面。

主要特色

  • 資源 (Resources):對應 Eloquent Model,支援新增、編輯、刪除資料。
  • 篩選器 (Filters):可自訂條件,協助快速查找資料。
  • 鏡頭 (Lenses):建立自訂資料檢視邏輯。
  • 批次操作 (Actions):執行自訂批次處理。
  • 儀表板與指標 (Dashboards & Metrics):顯示統計圖表如今日用戶數、銷售額。
  • Eloquent 關聯支援:支援 BelongsTo、HasMany、BelongsToMany 等。
  • 客製化 (Customization):支援自訂 UI 與元件。
  • 授權 (Authorization):整合 Laravel Policies 限制存取權限。

安裝 Laravel Nova 3.22.0

前置條件

  • 已建立 Laravel 專案。
  • Laravel Nova 是付費套件,需購買授權並下載安裝 zip 檔。
  • 將 Nova zip 解壓縮至專案根目錄的 nova/ 資料夾。

修改 composer.json

"require": {
    "laravel/nova": "*"
},
"repositories": [
    {
        "type": "path",
        "url": "./nova"
    }
]

安裝指令

composer update
php artisan nova:install
php artisan migrate

確認 app/Providers/NovaServiceProvider.php 存在。

建立管理員帳號

若使用內建 App\Models\User 模型,可於 Nova 資源內指定:

public static $model = 'App\Models\User';

安裝 NPM 相依套件(若有自訂前端資源)

npm install

Nova Artisan 指令總覽

指令 說明
nova:install 安裝 Nova 資源
nova:publish 發布設定、翻譯等資源檔案
nova:stubs 發布 Nova 的 stub 範本
nova:resource {name} 建立資源
nova:field {name} 建立自訂欄位
nova:filter {name} 建立篩選器
nova:custom-filter {name} 建立自訂篩選器
nova:action {name} 建立批次操作
nova:tool {name} 建立完整 Nova 擴充套件
nova:resource-tool {name} 建立資源頁專用工具
nova:card {name} 建立資訊卡片
nova:dashboard {name} 建立儀表板
nova:theme {name} 建立佈景主題
nova:asset {name} 建立資源套件(JS/CSS)
nova:value {name} 建立單一數值指標
nova:trend {name} 建立趨勢指標
nova:partition {name} 建立分類統計圖表
nova:lens {name} 建立自訂鏡頭
nova:translate 建立翻譯檔案
nova:user 建立 Nova 使用者

資源設定(Resource)

建立資源檔案

php artisan nova:resource Products

Nova 會於 app/Nova/Products.php 建立檔案。

註冊資源

app/Providers/NovaServiceProvider.php 中:

use App\Nova\Products;

public function resources()
{
    Nova::resources([
        Products::class,
    ]);
}

對應 Eloquent Model

public static $model = \App\Entities\Products::class;

預先載入關聯

public static $with = ['categories', 'media'];

預設排序方式

public static $indexDefaultOrder = [
    'is_top' => 'desc',
    'updated_at' => 'desc',
    'id' => 'desc',
];

副標題設定

public function subtitle()
{
    return $this->no;
}

可搜尋欄位

public static $search = [
    'no', 'title', 'model', 'brief', 'content', 'warranty', 'spec', 'subtitle',
];

自動輪詢設定

public static $polling = true;
public static $pollingInterval = 5; // 單位:秒

建議僅在需即時更新資料的頁面啟用,如訂單狀態監控等。

自訂導向行為

public static function redirectAfterCreate()
{
    return '/admin/products';
}

public static function redirectAfterUpdate()
{
    return '/admin/products/'.$this->id;
}

public static function redirectAfterDelete()
{
    return '/admin/products';
}

補充:相關連結