draw/contracts
Lightweight PHP contracts for Draw packages. Provides shared interfaces and abstractions to standardize implementations across components, improving interoperability, testing, and decoupling in Laravel or framework-agnostic projects.
bind() or tag() methods, but explicit bindings will be required for non-abstract classes.createMock()).UserRepositoryInterface) may require upfront design work.Illuminate\Database\Eloquent\Model), they may not be reusable outside Laravel.RepositoryInterface from laravelista/repository)?Domain\Contracts\UserRepository) or Laravel-aware (e.g., Domain\Contracts\EloquentUserRepository)?laravelista/repository, spatie/laravel-activitylog, or custom interfaces.Domain\Contracts\EventDispatcher).symfony/dependency-injection).UserRepositoryInterface).UserServiceInterface).UserCreatedEventInterface).Auth::user() → UserRepositoryInterface).$this->app->bind(
Domain\Contracts\UserRepository::class,
App\Repositories\EloquentUserRepository::class
);
public function __construct(private Domain\Contracts\UserRepository $users) {}
User::find() with users->find().illuminate/contracts (Laravel’s built-in interfaces).spatie/laravel-contracts (if it exists).App\Domain\Contracts\*).| Step | Task | Dependencies | Tools |
|---|---|---|---|
| 1 | Define core contracts | Business domain analysis | PHPStorm, VSCode |
| 2 | Implement Laravel adapters | Contracts | Laravel Artisan |
| 3 | Update DI container | Adapters | php artisan container:bind |
| 4 | Refactor services/controllers | DI updates | PHPStan, Rector |
| 5 | Add tests | Contracts + implementations | PestPHP, PHPUnit |
| 6 | Document contracts | All contracts | PHPDoc, Markdown |
GodObjectInterface) can hinder maintainability.if (!$this->users instanceof UserRepositoryInterface) throw new \RuntimeException(...)).draw/contracts) with strict versioning.OrderServiceInterface for a separate "Orders" service).App\Modules\Payments\Contracts\*).company/contracts).| Risk | Impact | Mitigation |
|---|---|---|
| Broken Contracts | Runtime errors if implementations don’t match. | Use PHPStan to enforce contracts at dev time. |
| Over-Engineering | Unnecessary abstraction for simple apps. | Start small; remove contracts if they add no value. |
| **Versioning Conf |
How can I help you explore Laravel packages today?