4.2 KiB
4.2 KiB
Laravel Coding Standards for Copilot (With Examples)
Version 1.0
This document defines the official Laravel coding standards enforced by Copilot for writing clean, secure, readable, and optimized code.
1. General Coding Rules
- Follow PSR-12 formatting.
- Use camelCase for variables & methods.
- Use PascalCase for classes.
- Use snake_case for database columns and tables.
- Limit functions to a clear, single responsibility.
Example
class UserProfileService
{
public function getFullName(User $user): string
{
return "{$user->first_name} {$user->last_name}";
}
}
2. Controller Standards
- Must remain thin.
- Use FormRequest for validation.
- Wrap logic in try/catch.
- Return standardized JSON responses.
- Use correct HTTP status codes.
Example
class UserController extends Controller
{
use ApiResponseTrait;
public function update(UpdateUserRequest $request, User $user)
{
try {
$updated = $this->service->updateProfile($user, $request->validated());
return $this->success($updated, 'Profile updated', 200);
} catch (\Throwable $e) {
Log::error('Update failed: '.$e->getMessage());
return $this->error('Unable to update profile', 500);
}
}
}
3. FormRequest Validation
- All inputs must be validated.
- No inline validator inside controllers.
Example
class UpdateUserRequest extends FormRequest
{
public function rules(): array
{
return [
'first_name' => 'required|string|max:150',
'last_name' => 'required|string|max:150',
'phone' => 'nullable|digits_between:10,12'
];
}
}
4. Service Layer Standards
- Wrap heavy logic in try/catch.
- Log exceptions.
- Use DB transactions for multi-step operations.
- Use optimized Eloquent queries.
Example
class UserProfileService
{
public function updateProfile(User $user, array $data)
{
try {
return DB::transaction(function () use ($user, $data) {
$user->update($data);
return $user->fresh();
});
} catch (\Throwable $e) {
Log::error('Service error: '.$e->getMessage());
throw $e;
}
}
}
5. Models
- Use fillable/guarded.
- Use casts.
- Use accessors/mutators where needed.
- Use query scopes.
Example
class User extends Model
{
protected $fillable = ['first_name','last_name','email','phone'];
protected $casts = [
'is_active' => 'boolean',
'email_verified_at' => 'datetime'
];
public function scopeActive($query)
{
return $query->where('is_active', true);
}
}
6. API Response Formatting
Use a shared trait.
Example
trait ApiResponseTrait
{
protected function success($data = null, $message = 'Success', $code = 200)
{
return response()->json([
'status' => true,
'message' => $message,
'data' => $data
], $code);
}
protected function error($message = 'Error', $code = 500)
{
return response()->json([
'status' => false,
'message' => $message
], $code);
}
}
7. Jobs & Queue Standards
- Heavy tasks must be queued.
- Wrap in try/catch.
Example
class SendReportJob implements ShouldQueue
{
public function handle()
{
try {
// generate report
} catch (\Throwable $e) {
Log::error('Report job failed: ' . $e->getMessage());
}
}
}
8. Linting (Pint)
Install
composer require laravel/pint --dev
Run
./vendor/bin/pint
9. Static Analysis (PHPStan)
Install
composer require --dev phpstan/phpstan
Run
vendor/bin/phpstan analyse
10. OpenTelemetry (Monitoring & Logs)
Install
composer require open-telemetry/opentelemetry-laravel
Publish
php artisan vendor:publish --provider="OpenTelemetry\Laravel\ServiceProvider"
Enable auto-instrumentation
php artisan otel:install
Final Notes
This standard ensures Copilot always writes clean, secure, maintainable, and production-ready Laravel code.