Good Code
The good version gives reviewers one class where the accepted fields and rules are visible before controller code runs.
Lesson 02
Move request validation into Form Request classes so controllers receive named, reviewed input shapes.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
final class StoreReviewRequest extends FormRequest
{
public function rules(): array
{
// Validation rules name the accepted request shape before controller code runs.
return [
'title' => ['required', 'string', 'max:120'],
'body' => ['required', 'string', 'min:20'],
'rating' => ['required', 'integer', 'between:1,5'],
];
}
}<?php
public function store(Request $request)
{
// Raw request data reaches persistence before one reviewed validation boundary.
if (! $request->title || strlen($request->body ?? '') < 20) {
abort(422);
}
return Review::create($request->all());
}The good version gives reviewers one class where the accepted fields and rules are visible before controller code runs.
The bad version mixes manual checks with $request->all(). That makes mass assignment, missing fields, and inconsistent error responses harder to catch.