开始

未匹配的标注

资源是用来为模型创建 CRUD 接口的静态类。它描述了管理员如何在应用内,使用表格和表单,与数据进行交互的。

新建资源

App\Models\Customer 模型新建资源:

php artisan make:filament-resource Customer

app/Filament/Resources 目录下将会生成一系列文件:

.
+-- CustomerResource.php
+-- CustomerResource
|   +-- Pages
|   |   +-- CreateCustomer.php
|   |   +-- EditCustomer.php
|   |   +-- ListCustomers.php

新的资源类在 CustomerResource.php 中。

Pages 目录下的类用于自定义后台管理面板中和资源交互的页面。这些页面是全页Livewire 组件,你可以根据需要自定义。

如果你创建的资源并没有在导航菜单中显示,很可能是因为你的《模型策略》的 viewAny() 方法并没有返回 true

简易(模态框)资源

有时候,你的模型过于简单,因此你只想在单个页面中管理记录。这种情况下你可以使用模态框进行创建,编辑和删除记录。要生成这样一个带有模态框的简易资源:

php artisan make:filament-resource Customer --simple

你的资源有一个管理 (Manage) 页面,该页面是一个带有模态框的列表页。

另外,你的资源类不再会有 getRelations() 方法,因为关系管理器只会在编辑页和查看页中展示,不会出现在简易资源中。其他方面则与普通资源相同。

自动生成表单和表格

如果你要节约时间,Filament 也可以基于你模型数据库的字段,为你自动生成一些《表单》 和《表格》:

使用此功能需要安装 doctrine/dbal 包:

composer require doctrine/dbal --dev

现在你可以使用 --generate 来生成资源了:

php artisan make:filament-resource Customer --generate

注意:如果表格中含有 ENUM 字段,doctrine/dbal 将无法扫描表格且会崩溃。因此 Filament 无法据此为资源生成 schema。更多详情查阅 此处

处理软删除

默认情况下,在后台面板中你不能处理删除了的记录。如果你想要在资源中添加恢复(restore)、强制删除和过滤垃圾记录等功能,可以在生成资源的时候使用 --soft-deletes 标志:

php artisan make:filament-resource Customer --soft-deletes

生成查看页面

默认情况下,资源只会生成列表页,新建页和编辑页。如果你也想要生成 查看页,使用 --view-page :

php artisan make:filament-resource Customer --view-page

记录的标题

可以为您的资源设置 $recordTitleAttribute,这是您模型上的列的名称,可用于将其与其他资源区分开来。

例如,这可能是博客文章 title 或客户的 name

protected static ?string $recordTitleAttribute = 'name';

这是《全局搜索》等功能工作所必需的。

如果仅一列不足以识别记录,您可以指定 Eloquent 访问器 的名称。

表单

资源类包含一个静态 form() 方法,用于在创建和编辑页面上构建表单:

use Filament\Forms;
use Filament\Resources\Form;

public static function form(Form $form): Form
{
    return $form
        ->schema([
            Forms\Components\TextInput::make('name')->required(),
            Forms\Components\TextInput::make('email')->email()->required(),
            // ...
        ]);
}

字段

schema() 方法用于定义表单的结构。它是一个《字段》数组,按照它们应该出现在您的表单中的顺序排列。

我们有许多字段可用于您的表单,包括:

  • 《文字输入》
  • 《选择》
  • 《多选》
  • 《复选框》
  • 《日期时间选择器》
  • 《上传文件》
  • 《丰富的编辑器》
  • 《降价编辑器》
  • 《中继器》

要查看可用表单字段的完整列表,请参阅《表单生成器文档》。

您还可以构建自己的完全《自定义的表单域》。

布局

表单布局是完全可定制的。我们有许多可用的布局组件,可以任意组合使用:

  • 《网格》
  • 《卡片》
  • 《选项卡》

要查看可用布局组件的完整列表,请参阅《Form Builder 文档》。

您还可以构建自己的完全《自定义布局组件》。

根据上下文隐藏组件

表单组件的方法 hiddenOn() 允许您根据当前页面或操作动态隐藏字段。

在这个例子中,我们隐藏页面 edit 上的字段 password

use Livewire\Component;

Forms\Components\TextInput::make('password')
    ->password()
    ->required()
    ->hiddenOn('edit'),

或者,我们有一个 visibleOn() 仅在一个页面或操作上显示一个字段的快捷方法:

use Livewire\Component;

Forms\Components\TextInput::make('password')
    ->password()
    ->required()
    ->visibleOn('create'),

表格

资源类包含一个静态 table() 方法,用于在列表页面上构建表:

use Filament\Resources\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;

public static function table(Table $table): Table
{
    return $table
        ->columns([
            Tables\Columns\TextColumn::make('name'),
            Tables\Columns\TextColumn::make('email'),
            // ...
        ])
        ->filters([
            Tables\Filters\Filter::make('verified')
                ->query(fn (Builder $query): Builder => $query->whereNotNull('email_verified_at')),
            // ...
        ])
        ->actions([
            Tables\Actions\EditAction::make(),
        ])
        ->bulkActions([
            Tables\Actions\DeleteBulkAction::make(),
        ]);
}

查看 记录列表 文档,了解如何添加表《列》、《过滤器》、《操作》、《批量操作》等。

关系

Filament 有许多实用程序可用于管理资源关系。您选择使用哪种解决方案取决于您的用例:

BelongsTo

选择记录

Filament 包括从关系中自动加载选项的能力 BelongsTo

use Filament\Forms\Components\Select;

Select::make('author_id')
    ->relationship('author', 'name')

《表单文档》中提供了更多信息。

布局组件

布局表单组件能够将《子数据保存到关系中》,例如 BelongsTo

use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;

Fieldset::make('Author')
    ->relationship('author')
    ->schema([
        TextInput::make('name')->required(),
        Textarea::make('bio'),
    ])

有关详细信息,请参阅《表单文档》。

HasOne

布局表单组件能够《将子数据保存到关系中》,例如HasOne

use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;

Fieldset::make('Metadata')
    ->relationship('metadata')
    ->schema([
        TextInput::make('title'),
        Textarea::make('description'),
        FileUpload::make('image'),
    ])

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~