laravel
Installation
SKILL.md
Laravel
Instructions
Do Things the Laravel Way
- Use
php artisan make:commands to create new files (i.e. migrations, controllers, models, etc.). - If you're creating a generic PHP class, use
php artisan make:class. - Pass
--no-interactionto all Artisan commands to ensure they work without user input. You should also pass the correct--optionsto ensure correct behavior.
Database
- Always use proper Eloquent relationship methods with return type hints. Prefer relationship methods over raw queries or manual joins.
- Use Eloquent models and relationships before suggesting raw database queries
- Avoid
DB::; preferModel::query(). Generate code that leverages Laravel's ORM capabilities rather than bypassing them. - Generate code that prevents N+1 query problems by using eager loading.
- Use Laravel's query builder for very complex database operations.
Model Creation
- When creating new models, create useful factories and seeders for them too. Ask the user if they need any other things.
APIs & Eloquent Resources
- For APIs, default to using Eloquent API Resources and API versioning unless existing API routes do not, then you should follow existing application convention.
Controllers & Validation
- Always create Form Request classes for validation rather than inline validation in controllers. Include both validation rules and custom error messages.
- Check sibling Form Requests to see if the application uses array or string based validation rules.
Queues
- Use queued jobs for time-consuming operations with the
ShouldQueueinterface.
Authentication & Authorization
- Use Laravel's built-in authentication and authorization features (gates, policies, Sanctum, etc.).
URL Generation
- When generating links to other pages, prefer named routes and the
route()function.
Configuration
- Use environment variables only in configuration files - never use the
env()function directly outside of config files. Always useconfig('app.name'), notenv('APP_NAME').
Testing
- When creating models for tests, use the factories for the models. Check if the factory has custom states that can be used before manually setting up the model.
- Faker: Use methods such as
$this->faker->word()orfake()->randomDigit(). Follow existing conventions whether to use$this->fakerorfake(). - When creating tests, make use of
php artisan make:test [options] {name}to create a feature test, and pass--unitto create a unit test. Most tests should be feature tests.
Laravel 12
- Since Laravel 11, Laravel has a new streamlined file structure which this project uses.
Laravel 12 Structure
- No middleware files in
app/Http/Middleware/. bootstrap/app.phpis the file to register middleware, exceptions, and routing files.bootstrap/providers.phpcontains application specific service providers.- No app\Console\Kernel.php - use
bootstrap/app.phporroutes/console.phpfor console configuration. - Commands auto-register - files in
app/Console/Commands/are automatically available and do not require manual registration.
Database
- When modifying a column, the migration must include all of the attributes that were previously defined on the column. Otherwise, they will be dropped and lost.
- Laravel 11 allows limiting eagerly loaded records natively, without external packages:
$query->latest()->limit(10);.
Models
- Casts can and likely should be set in a
casts()method on a model rather than the$castsproperty. Follow existing conventions from other models.
Related skills
More from markhamsquareventures/essentials
tailwind
How to work effectively with Tailwind CSS, always use when styling frontend features
36wayfinder
How to work effectively with Laravel Wayfinder, always use when developing frontend features
30react
How to work effectively with React, always use when developing frontend components
28shadcn
How to work effectively with shadcn/ui components, always use when adding UI components
26inertia
How to work effectively with Inertia, always use when developing frontend features
21pest
Pest framework syntax reference
20