Skip to content

Base Classes ​

The Base classes in Filament Twist provide foundational functionality for building addons, models, services, and other components. These abstract classes establish consistent patterns and shared functionality across the framework.

Overview ​

Filament Twist includes several base classes:

Architecture Overview ​

The base classes follow a consistent pattern and work together to provide a unified development experience:

mermaid
graph TD
    A[BaseAddon] --> B[Filament Plugin]
    A --> C[BaseModel]
    A --> D[BaseService]
    A --> E[BaseAction]
    
    C --> F[Database Layer]
    D --> G[Business Logic]
    E --> H[Command Pattern]
    
    I[BaseDTO] --> G
    J[BaseMigration] --> F
    K[BaseSettingsPage] --> B

Best Practices ​

1. Service Layer Architecture ​

php
// Use services for business logic
class UserManagementAddon extends BaseAddon
{
    public function boot(Panel $panel): void
    {
        $panel->resources([
            UserResource::class,
        ]);
    }
}

// Keep business logic in services
class UserService extends BaseService
{
    public function createUser(UserDTO $userData): User
    {
        return CreateUserAction::make($userData->toArray());
    }
}

2. Consistent Naming ​

php
// Follow naming conventions
class CreateUserAction extends BaseAction { }  // Actions end with "Action"
class UserService extends BaseService { }      // Services end with "Service"
class UserDTO extends BaseDTO { }              // DTOs end with "DTO"

3. Interface Implementation ​

php
// Implement relevant interfaces
class UserManagementAddon extends BaseAddon implements 
    HasMigration, 
    HasRouteApi 
{
    // Implementation
}

4. Configuration Awareness ​

php
// Respect Twist configuration
class UserModel extends BaseModel
{
    // Automatically uses Twist prefixes and connections
}

class CreateUsersTable extends BaseMigration
{
    // Automatically applies table prefixes
}

Integration Examples ​

Complete Addon Structure ​

php
// Addon class
class UserManagementAddon extends BaseAddon implements HasMigration
{
    public function boot(Panel $panel): void
    {
        $panel->resources([UserResource::class]);
    }

    public function pathMigrations(): string
    {
        return __DIR__ . '/Database/Migrations';
    }
}

// Model
class User extends BaseModel
{
    protected $fillable = ['name', 'email'];
}

// Service
class UserService extends BaseService
{
    public function createUser(UserDTO $data): User
    {
        return CreateUserAction::make($data->toArray());
    }
}

// Action
class CreateUserAction extends BaseAction
{
    public function handle(array $userData): User
    {
        return User::create($userData);
    }
}

// DTO
class UserDTO extends BaseDTO
{
    public function __construct(
        public string $name,
        public string $email
    ) {}
}

// Migration
class CreateUsersTable extends BaseMigration
{
    public function up(): void
    {
        Schema::create($this->prefix . 'users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }
}

Next Steps ​

Released under the MIT License.