create-request
Generates a Laravel FormRequest class for validation. Use when creating or updating data (e.g., "Add validation for student registration").
When & Why to Use This Skill
This Claude skill automates the generation of Laravel FormRequest classes, providing a standardized approach to backend data validation. By enforcing strict typing, modular directory structures, and clean architecture principles, it helps developers eliminate repetitive boilerplate code while ensuring secure and maintainable PHP applications.
Use Cases
- Rapidly creating validation logic for new feature modules like student registration or user onboarding.
- Refactoring inline controller validation into dedicated FormRequest classes to improve code readability and reusability.
- Standardizing validation rules across large-scale modular Laravel projects to maintain architectural consistency.
- Implementing complex validation requirements using Laravel's Rule builder for unique constraints and conditional logic.
| name | create-request |
|---|---|
| description | Generates a Laravel FormRequest class for validation. Use when creating or updating data (e.g., "Add validation for student registration"). |
| allowed-tools | Write, Read |
Create Form Request
This skill generates a FormRequest class, which is the mandatory location for all validation logic in this project.
Instructions
Identify Parameters:
- Module: (e.g.,
Identity,Academic). - Context: What action is being validated? (e.g.,
RegisterStudent,UpdateProfile). - Path:
app/Modules/{Module}/Http/Requests/{Module}/{ClassName}.php.
- Module: (e.g.,
Generate Code:
- Namespace:
App\Modules\{Module}\Http\Requests\{Module} - Method
authorize(): Returntrue(authorization is handled by Policies/Middleware, not here, unless simple ownership check). - Method
rules(): Return array of validation rules. - Strict Typing: Add
string,int,arraytype hints to the returned rules.
- Namespace:
Naming Convention:
- Do not prefix with Actor (e.g.,
StudentLoginRequest❌). - Use Domain Context (e.g.,
LoginRequest✅ insideIdentitymodule).
- Do not prefix with Actor (e.g.,
Template
<?php
namespace App\Modules\Identity\Http\Requests\Identity;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class RegisterStudentRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true; // Auth handled by Middleware/Policy
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
*/
public function rules(): array
{
return [
'first_name' => ['required', 'string', 'max:255'],
'last_name' => ['required', 'string', 'max:255'],
'email' => [
'required',
'string',
'email',
'max:255',
Rule::unique('users', 'email'),
],
'campus_id' => ['required', 'integer', 'exists:campuses,id'],
'password' => ['required', 'confirmed', 'min:8'],
];
}
}
Best Practices
- Complex Rules: Use
Rule::builder (e.g.,Rule::unique(),Rule::in()). - Custom Messages: Implement
messages()only if standard messages are insufficient. - Attributes: Implement
attributes()to provide friendly names for fields.