لا تستخدم request->all ، بل يجب إستخدام request->validated

لا تستخدم request->all ، بل يجب إستخدام request->validated

2024-11-24 وقت القراءه : 2 دقائق

Bad Practice Example

class Note extends Model
{
    /**
     * only Admins can store 'priority'
     * frontend shows the field 'priority' only when user is admin
     */
    protected $fillable = ['note_text', 'priority'];
}

class StoreNoteRequest extends FormRequest
{
    public function rules()
    {
        return ['note_text' = 'required'];
    }
}

class NoteController extends Controller
{
    public function store(StoreNoteRequest $request)
    {
        Note::create($request->all());
        return redirect()->route('notes.index');
    }
}

What To Do Instead

class Note extends Model
{
    /**
     * only Admins can store 'priority'
     * frontend shows the field 'priority' only when user is admin
     */
    protected $fillable = ['note_text', 'priority'];
}

class StoreNoteRequest extends FormRequest
{
    public function rules()
    {
        return ['note_text' = 'required'];
    }
}

class NoteController extends Controller
{
    public function store(StoreNoteRequest $request)
    {
        // Option 1:
        Note::create($request->only(['note_text']));
        // Option 2:
        Note::create($request->except(['priority']));
        // Option 3:
        Note::create($request->validated());
        return redirect()->route('notes.index');
    }
}


عند إستخدام $request->all() فإنه يتم إستخدام جميع الـ parameters التي يتم إرسالها من الواجهة الأمامية frontend، فإذا توقع أحد هيكلية قاعدة البيانات فإنه يمكن عمل inject لبيانات لا يجب أن يتم إدخالها في قاعدة البيانات مما يتسبب في مشاكل تتعلق بالأمان، عوضا عنها يجب إستخدام $request->validated حيث يتم إدخال البيانات التي تم التحقق منها بإستخدام FormRequest.

مقال عن كيفية إستخدام FormRequest

مجموعة من المقالات التي تختص في laravel validation

إضافة تعليق
Loading...