ساخت فرم در Filament و نمایش داده ها
در این آموزش یاد میگیریم چگونه با استفاده از Laravel و Filament یک فرم مدیریتی ایجاد کنیم که:
- داخل پنل مدیریت نمایش داده شود
- اطلاعات را در پایگاه داده ذخیره کند
- دادههای ثبتشده را به صورت جدول (CRUD کامل) نمایش دهد
این روش، استانداردترین و سریعترین راه ساخت فرمهای مدیریتی در Filament 3 است.
پیشنیازها
قبل از شروع، فرض میکنیم موارد زیر از قبل آماده هستند:
- Laravel و Filament 3 بهدرستی نصب شدهاند
- پنل مدیریت از مسیر
/adminدر دسترس است - اتصال دیتابیس برقرار شده و migrationها اجرا شدهاند
هدف نهایی
در پایان این آموزش، یک فرم ثبت پست خواهیم داشت با فیلدهای زیر:
- عنوان (Title)
- توضیحات (Body)
- وضعیت فعال / غیرفعال (is_active)
و این دادهها:
- در دیتابیس ذخیره میشوند
- در پنل مدیریت به صورت جدول قابل مشاهده، ویرایش و حذف هستند
مرحله ۱: ساخت Model و Migration
ابتدا یک مدل به همراه migration ایجاد میکنیم:
php artisan make:model Post -m
سپس فایل migration ساختهشده در مسیر زیر را ویرایش میکنیم:
database/migrations/xxxx_create_posts_table.php
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->boolean('is_active')->default(true);
$table->timestamps();
});
در نهایت migration را اجرا میکنیم:
php artisan migrate
مرحله ۲: ساخت Resource در Filament
در Filament، هر Resource بهصورت خودکار یک CRUD کامل (فرم + جدول) ایجاد میکند.
php artisan make:filament-resource Post
پس از اجرای این دستور، ساختار زیر ایجاد میشود:
app/Filament/Resources/
├── PostResource.php
└── PostResource/
└── Pages/
├── CreatePost.php
├── EditPost.php
└── ListPosts.php
مرحله ۳: تعریف فرم ثبت اطلاعات
فایل زیر را باز کنید:
app/Filament/Resources/PostResource.php
در متد form()، فیلدهای فرم را تعریف میکنیم:
use Filament\Forms;
use Filament\Forms\Form;
public static function form(Form $form): Form
{
return $form->schema([
Forms\Components\TextInput::make('title')
->label('عنوان')
->required()
->maxLength(255),
Forms\Components\Textarea::make('body')
->label('توضیحات')
->required(),
Forms\Components\Toggle::make('is_active')
->label('فعال؟')
->default(true),
]);
}
این فرم بهصورت خودکار در صفحه Create و Edit پنل مدیریت استفاده میشود.
مرحله ۴: تعریف جدول نمایش دادهها
در همان فایل، متد table() را برای نمایش دادهها به صورت جدول تنظیم میکنیم:
use Filament\Tables;
use Filament\Tables\Table;
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('title')
->label('عنوان')
->searchable(),
Tables\Columns\IconColumn::make('is_active')
->label('وضعیت')
->boolean(),
Tables\Columns\TextColumn::make('created_at')
->label('تاریخ ایجاد')
->date('Y-m-d'),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
]);
}
مرحله ۵: تنظیم fillable در Model (رفع خطای MassAssignment)
برای جلوگیری از خطای MassAssignmentException، باید فیلدها را در Model مجاز کنیم.
فایل زیر را ویرایش کنید:
app/Models/Post.php
class Post extends Model
{
use HasFactory;
protected $fillable = [
'title',
'body',
'is_active',
];
}
این مرحله ضروری است؛ در غیر این صورت Laravel اجازه ذخیره دادهها را نمیدهد.
مرحله ۶: تست نهایی
سرور را اجرا کنید:
php artisan serve
سپس وارد پنل مدیریت شوید:
http://127.0.0.1:8000/admin
اکنون میتوانید:
- یک پست جدید ثبت کنید
- دادهها را در جدول مشاهده کنید
- ویرایش یا حذف انجام دهید
جمعبندی
با استفاده از Filament، بدون نوشتن Controller، Route یا View دستی، توانستیم:
- یک فرم مدیریتی بسازیم
- دادهها را در دیتابیس ذخیره کنیم
- یک جدول مدیریتی کامل (CRUD) داشته باشیم
این ساختار، پایهی اصلی توسعه پنلهای حرفهای در Laravel + Filament است.
آیا این مطلب برای شما مفید بود ؟



