AuthorResource.php
TLDR
This file defines the AuthorResource
class, which is a resource class for managing authors in a blog. It includes methods for managing forms and tables related to authors.
Methods
form
This method returns a new instance of the Form
class and defines the form schema for managing authors. It includes text input fields for the author's name, email, bio, GitHub handle, and Twitter handle.
table
This method returns a new instance of the Table
class and defines the table schema for displaying and managing authors. It includes columns for the author's name, email, GitHub handle, and Twitter handle. It also includes actions for editing and deleting authors.
getRelations
This method returns an empty array, indicating that there are no relations associated with the AuthorResource
class.
getPages
This method returns an array with a single key-value pair. The key is 'index'
and the value is an instance of the Pages\ManageAuthors
class, representing the index page for managing authors.
Classes
No classes in this file.
<?php
namespace App\Filament\Resources\Blog;
use App\Filament\Resources\Blog\AuthorResource\Pages;
use App\Models\Blog\Author;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Notifications\Notification;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
class AuthorResource extends Resource
{
protected static ?string $model = Author::class;
protected static ?string $slug = 'blog/authors';
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $navigationGroup = 'Blog';
protected static ?string $navigationIcon = 'heroicon-o-users';
protected static ?int $navigationSort = 2;
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('name')
->required()
->maxLength(255),
Forms\Components\TextInput::make('email')
->label('Email address')
->required()
->maxLength(255)
->email()
->unique(Author::class, 'email', ignoreRecord: true),
Forms\Components\MarkdownEditor::make('bio')
->columnSpan('full'),
Forms\Components\TextInput::make('github_handle')
->label('GitHub')
->maxLength(255),
Forms\Components\TextInput::make('twitter_handle')
->label('Twitter')
->maxLength(255),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\Layout\Split::make([
Tables\Columns\Layout\Stack::make([
Tables\Columns\TextColumn::make('name')
->searchable()
->sortable()
->weight('medium')
->alignLeft(),
Tables\Columns\TextColumn::make('email')
->label('Email address')
->searchable()
->sortable()
->color('gray')
->alignLeft(),
])->space(),
Tables\Columns\Layout\Stack::make([
Tables\Columns\TextColumn::make('github_handle')
->icon('icon-github')
->label('GitHub')
->alignLeft(),
Tables\Columns\TextColumn::make('twitter_handle')
->icon('icon-twitter')
->label('Twitter')
->alignLeft(),
])->space(2),
])->from('md'),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->groupedBulkActions([
Tables\Actions\DeleteBulkAction::make()
->action(function () {
Notification::make()
->title('Now, now, don\'t be cheeky, leave some records for others to play with!')
->warning()
->send();
}),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ManageAuthors::route('/'),
];
}
}