Laravel Development Standards

evergreenLast update on Jul 9, 2026
Download .md

Project Layout

Laravel 11+ slim structure:

project/
├── app/
│   ├── Domain/          # Entity, repository interface
│   ├── Application/     # Service, DTO
│   └── Infrastructure/  # Eloquent repo, Controller, Filament
├── bootstrap/
├── config/
├── database/
│   ├── factories/
│   ├── migrations/
│   └── seeders/
├── resources/
│   └── views/
├── routes/
│   ├── web.php
│   └── api.php
├── storage/
├── tests/
│   ├── Feature/
│   └── Unit/
├── composer.json
└── .env.example

Repository Pattern

interface UserRepositoryInterface
{
    public function find(int $id): ?User;
    public function create(array $data): User;
}

class EloquentUserRepository implements UserRepositoryInterface
{
    public function __construct(private User $model) {}

    public function find(int $id): ?User
    {
        return $this->model->find($id);
    }
}

Bind di AppServiceProvider:

$this->app->bind(
    UserRepositoryInterface::class,
    EloquentUserRepository::class
);

Filament

Gunakan Filament untuk admin panel dan resource management.

class UserResource extends Resource
{
    protected static ?string $model = User::class;
    protected static ?string $navigationIcon = 'heroicon-o-users';
}

Testing

  • Feature test untuk HTTP endpoint.
  • Unit test untuk domain logic.
  • Use RefreshDatabase trait.
class UserTest extends TestCase
{
    use RefreshDatabase;

    public function test_user_can_be_created()
    {
        $response = $this->postJson('/api/users', [
            'name' => 'Khoirul',
            'email' => 'test@example.com',
        ]);

        $response->assertCreated()
            ->assertJsonPath('data.name', 'Khoirul');
    }
}

Tools

ToolCommandFungsi
Pint./vendor/bin/pintFormatting
PHPStan./vendor/bin/phpstan analyseStatic analysis
Sailsail upDocker dev

Config

  • Cache config di production: php artisan config:cache
  • Route cache: php artisan route:cache
  • Never commit .env.