في هذا الـ section سوف نتعامل مع User Model لذلك نحن بحاجة لإنشاء user resource
php artisan make:filament-resource User
وكما تعلمنا في الدروس السابقة لتحديد الحقول التي نريد عرضها، نذهب إلى UserResource.php وبداخل الدالة table نحدد الحقول وكذلك الترتيب الإفتراضي لعرض البيانات هنا سوف نجعله حسب id
public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('id') ->sortable() ->label('ID'), Tables\Columns\TextColumn::make('name')->sortable(), Tables\Columns\TextColumn::make('email')->sortable(), Tables\Columns\TextColumn::make('created_at')->sortable(), ]) ->defaultSort('id','desc') ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); }
كما نلاحظ أننا قمنا بجعل جميع الحقول sortable
إذا اردنا تغيير شكل created_at نذهب للدالة TextColumn created_at ونستخدم الخاصية date ونحدد الشكل الذي نريده أن يظهر عليه.
->columns([ Tables\Columns\TextColumn::make('id') ->sortable() ->label('ID'), Tables\Columns\TextColumn::make('name')->sortable(), Tables\Columns\TextColumn::make('email')->sortable(), Tables\Columns\TextColumn::make('created_at') ->date('d/m/Y H:i') ->sortable(), ])
بداية كما نرى في الصوره أن يمكن حذف مستخدم معين من خلال Bulk Actions
أما إذا أردنا منع عملية الحذف كل ما علينا القيام به هو الذهاب إلى User Resource وبداخل الدالة table بداخل bulk actions نقوم بإزالة إمكانية الحذف
public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('id') ->sortable() ->label('ID'), Tables\Columns\TextColumn::make('name')->sortable(), Tables\Columns\TextColumn::make('email')->sortable(), Tables\Columns\TextColumn::make('created_at') ->date('d/m/Y H:i') ->sortable(), ]) ->defaultSort('id','desc') ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ // Tables\Actions\BulkActionGroup::make([ // Tables\Actions\DeleteBulkAction::make(), // ]), ]); }
كما نرى إننا قمنا بتعطيل عملية الحذف من خلال تعطيل الدوال بداخل bulkActions
->bulkActions([ // Tables\Actions\BulkActionGroup::make([ // Tables\Actions\DeleteBulkAction::make(), // ]), ]);
لكن المشكله أنه عند الذهاب لتعديل مستخدم معين بإننا نرى الـ button الخاص بعملية الحذف، ولإزالة هذا الـ button يمكن لنا إضافه canDelete مع تمرير الموديل
public static function canDelete(Model $user) :bool { return false; }
كذلك يمكن إضافة الدالة canDeleteAny
public static function canDeleteAny() :bool { return false; }
هنا نحتاج للقيام بأمرين
الأول إزالة create من الدالة getPages
public static function getPages(): array { return [ 'index' => Pages\ListUsers::route('/'), //'create' => Pages\CreateUser::route('/create'), 'edit' => Pages\EditUser::route('/{record}/edit'), ]; }
كما نرى إننا قمنا بتعطيل //'create' => Pages\CreateUser::route('/create'),
الأمر الثاني
إضافة الدالة canCreate إلى UserResource
public static function canCreate() :bool { return false; }
كما نلاحظ في الصوره أنه تم إزالة الـ button الخاص بعملية إضافة المستخدمين.