Generate FilamentPHP v4 resources with form, table, relation managers, and actions
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: filament-resource
description: Generate FilamentPHP v4 resources with form, table, relation managers, and actions
---
# FilamentPHP Resource Generation Skill
## Overview
This skill generates complete FilamentPHP v4 resources including form schemas, table configurations, relation managers, and custom pages. All generated code follows official documentation patterns.
## Documentation Reference
**CRITICAL:** Before generating any resource, read:
- `/home/mwguerra/projects/mwguerra/claude-code-plugins/filament-specialist/skills/filament-docs/references/general/03-resources/`
- `/home/mwguerra/projects/mwguerra/claude-code-plugins/filament-specialist/skills/filament-docs/references/forms/`
- `/home/mwguerra/projects/mwguerra/claude-code-plugins/filament-specialist/skills/filament-docs/references/tables/`
## Workflow
### Step 1: Gather Requirements
Identify:
- Model name and namespace
- Fields to include in form
- Columns to display in table
- Relationships to manage
- Custom actions needed
- Authorization requirements
### Step 2: Generate Base Resource
Use Laravel artisan to create the resource:
```bash
# Basic resource
php artisan make:filament-resource ModelName
# With generate flag (creates form/table from model)
php artisan make:filament-resource ModelName --generate
# Soft deletes support
php artisan make:filament-resource ModelName --soft-deletes
# View page only
php artisan make:filament-resource ModelName --view
# Simple resource (modal forms instead of pages)
php artisan make:filament-resource ModelName --simple
```
### Step 3: Customize Form Schema
Read form field documentation and implement:
```php
use Filament\Forms;
use Filament\Forms\Form;
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Section::make('Basic Information')
->schema([
Forms\Components\TextInput::make('name')
->required()
->maxLength(255),
Forms\Components\Textarea::make('description')
->rows(3)
->columnSpanFull(),
]),
Forms\Components\Section::make('Settings')
->schema([
Forms\Components\Toggle::make('is_active')
->default(true),
Forms\Components\Select::make('status')
->options([
'draft' => 'Draft',
'published' => 'Published',
]),
]),
]);
}
```
### Step 4: Customize Table
Read table documentation and implement:
```php
use Filament\Tables;
use Filament\Tables\Table;
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('name')
->searchable()
->sortable(),
Tables\Columns\IconColumn::make('is_active')
->boolean(),
Tables\Columns\BadgeColumn::make('status')
->colors([
'warning' => 'draft',
'success' => 'published',
]),
Tables\Columns\TextColumn::make('created_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
Tables\Filters\SelectFilter::make('status')
->options([
'draft' => 'Draft',
'published' => 'Published',
]),
Tables\Filters\TernaryFilter::make('is_active'),
])
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
```
### Step 5: Add Relation Managers
For relationships, create relation managers:
```bash
php artisan make:filament-relation-manager ResourceName RelationName column_name
```
Register in resource:
```php
public static function getRelations(): array
{
return [
RelationManagers\CommentsRelationManager::class,
RelationManagers\TagsRelationManager::class,
];
}
```
### Step 6: Configure Pages
Define resource pages:
```php
public static function getPages(): array
{
return [
'index' => Pages\ListModels::route('/'),
'create' => Pages\CreateModel::route('/create'),
'view' => Pages\ViewModel::route('/{record}'),
'edit' => Pages\EditModel::route('/{record}/edit'),
];
}
```
### Step 7: Add Authorization
Implement policy methods:
```php
public static function canViewAny(): bool
{
return auth()->user()->can('view_any_model');
}
public static function canCreate(): bool
{
return auth()->user()->can('create_model');
}
```
## Form Field Reference
### Text Fields
- `TextInput::make()` - Single line text
- `Textarea::make()` - Multi-line text
- `RichEditor::make()` - WYSIWYG editor
- `MarkdownEditor::make()` - Markdown editor
### Selection Fields
- `Select::make()` - Dropdown select
- `Radio::make()` - Radio buttons
- `Checkbox::make()` - Single checkbox
- `CheckboxList::make()` - Multiple checkboxes
- `Toggle::make()` - Toggle switch
### Date/Time Fields
- `DatePicker::make()` - Date only
- `DateTimePicker::make()` - Date and time
- `TimePicker::make()` - Time only
### File Fields
- `FileUpload::make()` - File upload
- `SpatieMediaLibraryFileUpload::make()` - Media library
### Relationship Fields
- `Select::make()->relationship()` - BelongsTo select
- `CheckboxList::make()->relationship()` - BelongsToMany
- `Repeater::make()->relationship()` - HasMany inline
### Layout Components
- `Section::make()` - Card section
- `Fieldset::make()` - Fieldset grouping
- `Tabs::make()` - Tabbed sections
- `Grid::make()` - Grid layout
- `Split::make()` - Split layout
## Table Column Reference
### Text Columns
- `TextColumn::make()` - Basic text
- `IconColumn::make()` - Boolean icon
- `ImageColumn::make()` - Image thumbnail
- `BadgeColumn::make()` - Badge styling
- `ColorColumn::make()` - Color swatch
### Column Modifiers
- `->searchable()` - Enable search
- `->sortable()` - Enable sort
- `->toggleable()` - Can hide/show
- `->wrap()` - Wrap text
- `->limit()` - Truncate text
## Output
For each resource, generate:
1. **Resource class** - `app/Filament/Resources/ModelResource.php`
2. **Pages** - `app/Filament/Resources/ModelResource/Pages/`
3. **Relation Managers** - `app/Filament/Resources/ModelResource/RelationManagers/`
4. **Test file** - `tests/Feature/Filament/ModelResourceTest.php`
No comments yet. Be the first to comment!