Generate Resource and Disable Create/Edit/Delete

Generate Resource and Disable Create/Edit/Delete

2024-11-19 وقت القراءه : 2 دقائق

في هذا الدرس سوف نتعامل مع Payment لذلك بداية سوف نقوم بإنشاء Payment Resource وسوف نقوم بمنع عملية إضافه دفعه جديده من لوحة التحكم وكذلك التعديل على دفعة معينة

php artisan make:filament-resource Payment

بعد إنشاء Resource وبما أننا لا نريد التعديل والإضافه، بالتالي نذهب للملف PaymentResource ومن الدالة getPages نقوم بإزالة create, edit

public static function getPages(): array
{
    return [
        'index' => Pages\ListPayments::route('/'),
        //'create' => Pages\CreatePayment::route('/create'),
        //'edit' => Pages\EditPayment::route('/{record}/edit'),
    ];
}

كذلك حذف او تعديل EditAction و BulkActionGroup من الدالة table

public static function table(Table $table): Table
{
    return $table
        ->columns([
            //
        ])
        ->filters([
            //
        ])
        ->actions([
            //Tables\Actions\EditAction::make(),
        ])
        ->bulkActions([
            //Tables\Actions\BulkActionGroup::make([
                //Tables\Actions\DeleteBulkAction::make(),
            //]),
        ]);
}

وكذلك إضافة الدالتين canCreate و canDeleteAny

public static function canCreate() : bool
{
    return false;
}

public static function canDeleteAny() : bool
{
    return false;
}

وبما أنه لا نريد القيام بالتعديل او انشاء دفعه جديده بالتالي لا داعي لوجود الصفحات الخاصه بها، لذلك سنقوم بحذف هذه الصفحات

Filament/Resources/ProductResource/Pages/EditProduct.php
Filament/Resources/ProductResource/Pages/CreateProduct.php


عرض المدفوعات

لعرض المدفوعات نحتاج للحقول التالية  

created_at, product_name, user_name, user_email, voucher.code, subtotal, taxes, total

لذلك في الدالة table بداخل columns نقوم بإضافة هذه الحقول

public static function table(Table $table): Table
{
    return $table
        ->columns([
            Tables\Columns\TextColumn::make('created_at')->label('Payment time'),
            Tables\Columns\TextColumn::make('product.name'),
            Tables\Columns\TextColumn::make('user.name')->label('User name'),
            Tables\Columns\TextColumn::make('user.email')->label('User email'),
            Tables\Columns\TextColumn::make('voucher.code'),
            Tables\Columns\TextColumn::make('subtotal')->money('usd'),
            Tables\Columns\TextColumn::make('taxes')->money('usd'),
            Tables\Columns\TextColumn::make('total')->money('usd'),
        ])
        ->filters([
            //
        ])
        ->actions([
            //Tables\Actions\EditAction::make(),
        ])
        ->bulkActions([
            //Tables\Actions\BulkActionGroup::make([
                //Tables\Actions\DeleteBulkAction::make(),
            //]),
        ]);
}

الأن لو ذهبنا إلى الوحة التحكم إلى payment tab سنرى ما يلي

كما نرى ان user name, user email, product name, voucher code لم تظهر، ويعود ذلك لأننا لم نقوم بتحديد العلاقات في Payment. Model

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Payment extends Model
{
    use HasFactory;
    protected $fillable = ['product_id', 'user_id', 'voucher_id', 'subtotal', 'taxes', 'total'];


    public function product(): BelongsTo
    {
        return $this->belongsTo(Product::class);
    }


    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }


    public function voucher(): BelongsTo
    {
        return $this->belongsTo(Voucher::class);
    }
}

الأن بعد تحديد العلاقات سيظهر لدينا جميع الحقول


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