В модели у меня есть 2 конкретных столбца с названиями ‘is_editable
‘ и ‘is_deletable
‘ (оба являются boolean
). В таблице filament, при отображении записи, я хочу отключить кнопки Редактировать и/или Удалить, если ‘is_editable
‘ и/или ‘is_deletable
‘ установлены в false. Я не знаю, как это сделать. Может кто-то помочь мне решить эту проблему?
[Пожалуйста, посмотрите картину таблицы здесь](https://i.sstatic.net/8WSrvCTK.png)
Искал в документации Filament
Ответ
Для отключения кнопок редактирования и удаления конкретных записей в Filament для Laravel в зависимости от значений полей is_editable
и is_deletable
, вы можете использовать различные методы при создании вашего ресурса. Вот шаги, которые помогут вам реализовать эту функциональность.
-
Определите модель и добавьте необходимые поля:
Убедитесь, что ваша модель включает поля
is_editable
иis_deletable
. Например:namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class YourModel extends Model { use HasFactory; protected $fillable = ['name', 'is_editable', 'is_deletable']; // добавьте ваши поля }
-
Создайте или отредактируйте ресурс Filament:
Если у вас уже есть ресурс для вашей модели, откройте его. Если нет, создайте новый, используя команду artisan:
php artisan make:filament-resource YourModel
-
Настройте отключение кнопок в ресурсе:
В вашем классе ресурса, который обычно находится по пути
app/Filament/Resources/YourModelResource.php
, вы можете переопределить методыcanDelete
иcanEdit
для управления правами на редактирование и удаление.Пример кода:
namespace App\Filament\Resources; use App\Filament\Resources\YourModelResource\Pages; use App\Models\YourModel; use Filament\Resources\Resource; use Filament\Resources\Table; use Filament\Tables; class YourModelResource extends Resource { protected static ?string $model = YourModel::class; public static function table(Table $table): Table { return $table ->columns([ // ваши колонки здесь ]) ->actions([ Tables\Actions\EditAction::make() ->can(fn ($record) => $record->is_editable), // отключить кнопку Edit, если is_editable = false Tables\Actions\DeleteAction::make() ->can(fn ($record) => $record->is_deletable), // отключить кнопку Delete, если is_deletable = false ]); } public static function getPages(): array { return [ 'index' => Pages\ListYourModels::route('/'), 'create' => Pages\CreateYourModel::route('/create'), 'edit' => Pages\EditYourModel::route('/{record}/edit'), ]; } }
-
Проверка работы:
После этих изменений, когда вы откроете интерфейс Filament, вы увидите, что кнопки редактирования и удаления будут отключены в зависимости от значений
is_editable
иis_deletable
. -
Тестирование:
Проверьте вашу реализацию, создав несколько записей с различными значениями полей
is_editable
иis_deletable
, чтобы убедиться, что кнопки работают как ожидается.
Следуя этим шагам, вы сможете эффективно управлять возможностями редактирования и удаления записей в Filament в зависимости от ваших требований.