الـ core functionality في filament هو Resource فهي تستخدم للتعامل مع Model معين في لارافيل.
هنا لأننا نريد التعامل مع Product Model بالتالي يجب علينا إنشاء filament-resource ومن ثم تمرير إسم الموديل، وفي هذه المثال سوف نستخدم Product
php artisan make:filament-resource Product INFO Filament resource [app/Filament/Resources/ProductResource.php] created successfully.
بعد تنفيذ الأمر سيتم إنشاء ما يلي
في المسار app/Filament/Resource سيتم إنشاء ProductResource.php وكذلك سيتم إنشاء مجلد بإسم الموديل وهنا هو ProductResource ويحتوي على مجلد Pages وبداخله الصفحات التي سيتم عرضها او سيتعامل معها المستخدم وهي create,edit,list
كذلك يجب علينا إنشاء Product Model و migration
php artisan make:model Product -m
public function up(): void { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('slug')->nullable(); $table->integer('price'); $table->boolean('is_active')->default(true); $table->string('image')->nullable(); $table->timestamps(); }); }
php artisan migrate
الأن لو توجهنا إلى لوحة التحكم سنجد أنه تم إضافة Product في الـ menu الجانبيه، وعند الضغط عليها سيتم عرض صفحة list products
لعرض البيانات مثلا لفرض إننا نريد إظهار الإسم والسعر، هنا يجب الذهاب ProductResource وبداخل الدالة $table بداخل columns نقوم بتحديد الحقول التي نريد إرجاعها
public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name'), Tables\Columns\TextColumn::make('price'), ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); }
الأن لو ذهبنا إلى لوحة التحكم إلى Product tab ستظهر لنا المنتجات
لإضافة البيانات ، نحتاج لإنشاء form ولذلك يجب الذهاب إلى ProductResource.php وبداخل الدالة form بداخل schema نقوم بتحديد الحقول التي نحتاجها
public static function form(Form $form): Form { return $form ->schema([ Forms\Components\TextInput::make('name') ->required() ->maxLength(255), Forms\Components\TextInput::make('price') ->required(), ]); }
الأن لو ذهبنا إلى إضافة منتج أو تعديل منتج ستظهر لنا هذه الـ form
مع الإنتباه أنه عند عملية الحفظ أو التعديل فإنه لا يتم توجيه المستخدم لصفحة index بل يبقى في نفس الصفحة.