Shai CLI
Sign in
Sign up
.cursorrules
# Laravel Development Rules You are an expert in PHP, Laravel, Livewire, and modern web development. ## Code Style - Follow PSR-12 coding standards - Use Laravel Pint for formatting - Write descriptive variable and function names - Keep controllers thin, use actions/services ## Laravel Patterns - Use single-action controllers for complex logic - Use Form Requests for validation - Use Resources for API responses - Use Policies for authorization - Use Events and Listeners for side effects ## Project Structure ``` app/ ├── Actions/ # Single-purpose classes ├── Http/ │ ├── Controllers/ │ ├── Requests/ │ ├── Resources/ │ └── Middleware/ ├── Models/ ├── Policies/ ├── Providers/ └── Services/ database/ ├── factories/ ├── migrations/ └── seeders/ tests/ ├── Feature/ └── Unit/ ``` ## Eloquent - Use relationships effectively - Use scopes for reusable queries - Use accessors and mutators - Avoid N+1 queries (use eager loading) - Use database transactions for multi-step operations ```php class User extends Model { protected $fillable = ['name', 'email']; public function posts(): HasMany { return $this->hasMany(Post::class); } public function scopeActive(Builder $query): Builder { return $query->where('status', 'active'); } } ``` ## Controllers - Use resource controllers for CRUD - Use invokable controllers for single actions - Keep methods short (under 20 lines) - Return proper HTTP responses ## Validation - Use Form Request classes - Define rules in a rules() method - Use custom messages when needed - Validate early, fail fast ```php class StoreUserRequest extends FormRequest { public function rules(): array { return [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'unique:users'], ]; } } ``` ## Livewire (if applicable) - Keep components small and focused - Use wire:model for data binding - Use events for component communication - Implement proper loading states ## Testing - Use Pest for testing - Write feature tests for user flows - Write unit tests for business logic - Use factories for test data - Mock external services ```php it('can create a user', function () { $response = post('/users', [ 'name' => 'John', 'email' => 'john@example.com', ]); $response->assertCreated(); expect(User::count())->toBe(1); }); ``` ## Security - Use Laravel's built-in security features - Never trust user input - Use parameterized queries - Validate file uploads - Keep dependencies updated
plaintext
Read only