Date Format , Delete Users, Enable Only Edit

Date Format , Delete Users, Enable Only Edit

2024-10-16 وقت القراءه : 2 دقائق

في هذا الـ 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(),
])


منع حذف مستخدم معين في Filament

بداية كما نرى في الصوره أن يمكن حذف مستخدم معين من خلال 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 الخاص بعملية إضافة المستخدمين.


إضافة تعليق
Loading...