In Laravel, you can achieve request validation directly within your controller methods by using Form Request classes. These classes encapsulate the validation logic and can be injected into your controller methods as the first argument. Here's how you can do it:
-
Create a Form Request Class:
You can create a Form Request class using the Artisan command:
php artisan make:request StoreUserRequest -
Define Validation Rules:
Open the newly created
StoreUserRequestclass located inapp/Http/Requests/StoreUserRequest.phpand define your validation rules in therulesmethod:namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreUserRequest extends FormRequest { public function authorize() { return true; } public function rules() { return [ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users,email', 'password' => 'required|string|min:8|confirmed', ]; } } -
Inject the Form Request into Your Controller Method:
In your controller, you can now type-hint the
StoreUserRequestclass in the method where you want to handle the request. Laravel will automatically validate the request before the method is executed:namespace App\Http\Controllers; use App\Http\Requests\StoreUserRequest; use App\Models\User; use Illuminate\Http\Request; class UserController extends Controller { public function store(StoreUserRequest $request) { // The incoming request is valid... // Retrieve the validated input data... $validated = $request->validated(); // Create a new user $user = User::create([ 'name' => $validated['name'], 'email' => $validated['email'], 'password' => bcrypt($validated['password']), ]); return response()->json($user, 201); } }
By using Form Request classes, you keep your controller methods clean and focused on handling the business logic, while the validation logic is encapsulated within the Form Request class. This approach is similar to how Lumen handles request validation.