Создание ресурса в Filament
Модель поста в панели описывают ресурсом. Список этой модели открывается по адресу /admin/posts. Artisan собирает заготовку: каталог с классом ресурса, страницами, формой и таблицей. Так проще, чем копировать структуру вручную и промахнуться с именами классов.
В корне проекта выполним команду:
php artisan make:filament-resource Post
Команда создаст каталог ресурса
постов и файлы PostResource.php,
ListPosts.php,
CreatePost.php,
EditPost.php,
PostForm.php
и PostsTable.php.
Класс ресурса связывает модель
с формой и таблицей. Метод
form отдаёт настройку
формы классу схемы, метод
table - настройку
таблицы классу таблицы:
<?php
namespace App\Filament\Resources\Posts;
use App\Filament\Resources\Posts\Schemas\PostForm;
use App\Filament\Resources\Posts\Tables\PostsTable;
use App\Models\Post;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Tables\Table;
class PostResource extends Resource
{
protected static ?string $model = Post::class;
public static function form(Schema $schema): Schema
{
return PostForm::configure($schema);
}
public static function table(Table $table): Table
{
return PostsTable::configure($table);
}
}
?>
В PostForm.php перечисляют
поля формы. Пока достаточно
одного текстового поля заголовка,
чтобы экран создания открылся:
<?php
namespace App\Filament\Resources\Posts\Schemas;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
class PostForm
{
public static function configure(Schema $schema): Schema
{
return $schema->components([
TextInput::make('title'),
]);
}
}
?>
В PostsTable.php задают
колонки списка. Одной текстовой
колонки заголовка хватит,
чтобы таблица на странице списка
отобразилась:
<?php
namespace App\Filament\Resources\Posts\Tables;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class PostsTable
{
public static function configure(Table $table): Table
{
return $table->columns([
TextColumn::make('title'),
]);
}
}
?>
Создайте ресурс для модели
работника Worker. В меню
должен появиться список с одним
текстовым полем и одной текстовой
колонкой имени работника.