تكرار السؤال: …
الإجابة المختصرة
عبر فئة مخصصة تنفذ authorize() للتحقق من صلاحية المستخدم، و rules() لقواعد التحقق، وترجع أخطاء التحقق برمز 422 تلقائياً دون وصولها للمتحكم.
الشرح
بدلاً من ملء دوال الـ Controller باستدعاءات $request->validate()، توفر Form Requests فئات متخصصة ونظيفة. يتم حقن الفئة كمعامل في الدالة؛ يقوم Laravel باستدعاء authorize() أولاً (ويرجع 403 Forbidden إذا أعادت false)، ثم يطبق قواعد rules()، وإذا فشل أي شرط يرجع استجابة JSON برمز 422 وتفاصيل الحقول غير المطابقة فوراً.
مثال بالكود
class StorePostRequest extends FormRequest {
public function authorize(): bool {
return $this->user()->can('create', Post::class);
}
public function rules(): array {
return [
'title' => ['required', 'string', 'max:255'],
'body' => ['required'],
];
}
}أخطاء شائعة
- ترك دالة authorize() تعيد false افتراضياً دون تعديل مما يمنع جميع المستخدمين برمز 403.