الدورات

title


التعامل مع Requests في لارافيل: جمع البيانات والتحقق منها

التعامل مع Requests في لارافيل: جمع البيانات والتحقق منها

التعامل مع Requests في لارافيل: جمع البيانات والتحقق منها

تُعتبر الطلبات (Requests) في لارافيل من أهم المفاهيم التي تساعد في جمع البيانات القادمة من المستخدمين (عبر النماذج أو الـAPI) والتحقق منها قبل معالجتها.

من خلال نظام الـRequest في لارافيل، يمكنك التحكم الكامل في البيانات، وتنظيفها، والتحقق من صحتها بطريقة منظمة وآمنة.

في هذا المقال، سنشرح خطوة بخطوة كيفية التعامل مع Requests في لارافيل، وجمع البيانات، والتحقق منها باستخدام الأدوات المدمجة في الإطار.


أولاً: ما هو الـRequest في لارافيل؟

الـRequest هو كائن (Object) يمثل الطلب الذي أرسله المستخدم إلى الخادم (Server).

سواء كان الطلب من نوع GET أو POST أو PUT أو DELETE، يقوم لارافيل بتمثيله في كائن من نوع:

Illuminate\Http\Request

ويمكنك الحصول عليه مباشرة داخل أي Controller أو Route.


ثانياً: جمع البيانات من الطلب

لنفترض أن لدينا نموذج تسجيل بسيط يحتوي على الاسم والبريد الإلكتروني وكلمة المرور.

يمكننا التقاط البيانات بسهولة عبر كائن الـRequest:

use Illuminate\Http\Request;

class RegisterController extends Controller
{
    public function register(Request $request)
    {
        $name = $request->input('name');
        $email = $request->input('email');
        $password = $request->input('password');

        return "تم استلام البيانات: $name - $email";
    }
}

طرق مختلفة للحصول على البيانات:

  • $request->input('key')
  • $request->get('key')
  • $request->all() (لجلب كل البيانات المرسلة).
  • $request->only(['name', 'email']) لجلب حقول محددة.
  • $request->except(['_token']) لجلب كل الحقول عدا حقل معين.

ثالثاً: التحقق من صحة البيانات (Validation)

من أفضل ميزات لارافيل هو نظام التحقق من صحة البيانات المدمج، والذي يجعل كتابة القواعد سهلة وواضحة.

مثال على التحقق من البيانات:

public function register(Request $request)
{
    $request->validate([
        'name' => 'required|min:3',
        'email' => 'required|email|unique:users,email',
        'password' => 'required|min:6|confirmed'
    ]);

    // بعد التحقق، يمكن حفظ البيانات
    // User::create($request->all());

    return "تم التسجيل بنجاح!";
}

شرح القواعد:

  • required: الحقل مطلوب.
  • min:3: يجب ألا يقل عدد الحروف عن 3.
  • email: يجب أن يكون بريد إلكتروني صالح.
  • unique:users,email: يجب أن يكون البريد الإلكتروني فريداً في جدول المستخدمين.
  • confirmed: يتطلب وجود حقل إضافي باسم password_confirmation للتأكد من تطابق كلمة المرور.

رابعاً: إنشاء Request مخصص (Form Request)

بدلاً من كتابة التحقق داخل الـController، يمكنك إنشاء كلاس Request مخصص باستخدام الأمر:

php artisan make:request RegisterRequest

سيتم إنشاء ملف داخل المسار:

app/Http/Requests/RegisterRequest.php

نقوم بتعديل الكود بداخله كالتالي:

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class RegisterRequest extends FormRequest
{
    public function authorize()
    {
        return true; // السماح بالتحقق للجميع
    }

    public function rules()
    {
        return [
            'name' => 'required|min:3',
            'email' => 'required|email|unique:users,email',
            'password' => 'required|min:6|confirmed'
        ];
    }

    public function messages()
    {
        return [
            'name.required' => 'الاسم مطلوب.',
            'email.email' => 'يرجى إدخال بريد إلكتروني صالح.',
            'password.confirmed' => 'كلمتا المرور غير متطابقتين.'
        ];
    }
}

ثم نستخدمه في الـController بدلاً من كائن Request العادي:

use App\Http\Requests\RegisterRequest;

class RegisterController extends Controller
{
    public function register(RegisterRequest $request)
    {
        // التحقق يتم تلقائياً من خلال الكلاس
        // يمكن الآن استخدام البيانات بأمان
        // User::create($request->validated());

        return "تم التسجيل بنجاح!";
    }
}

خامساً: التعامل مع الأخطاء في التحقق

عندما يفشل التحقق من البيانات، يقوم لارافيل بإعادة المستخدم إلى الصفحة السابقة تلقائياً مع رسائل الأخطاء.

يمكنك عرض الأخطاء في الـView باستخدام:

@if ($errors->any())
    <div>
        <ul>
            @foreach ($errors->all() as $error)
                <li style="color: red;">{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

سادساً: التحقق اليدوي (Manual Validation)

في بعض الحالات الخاصة، قد ترغب بالتحقق من البيانات يدوياً:

use Illuminate\Support\Facades\Validator;

public function register(Request $request)
{
    $validator = Validator::make($request->all(), [
        'email' => 'required|email',
        'password' => 'required|min:6'
    ]);

    if ($validator->fails()) {
        return back()->withErrors($validator)->withInput();
    }

    return "تم التسجيل بنجاح!";
}

سابعاً: تنظيف البيانات قبل التحقق (Data Sanitization)

يمكنك تعديل أو تنظيف البيانات قبل التحقق داخل دالة prepareForValidation() في الـForm Request:

protected function prepareForValidation()
{
    $this->merge([
        'email' => strtolower($this->email),
    ]);
}

خلاصة

  • كائن Request هو الأساس في جمع البيانات من المستخدمين في لارافيل.
  • يمكنك استخدام $request->input() أو $request->all() لجلب البيانات.
  • Validation يساعد على حماية التطبيق من البيانات غير الصحيحة.
  • يمكن إنشاء Form Request مخصص لتنظيم الكود بشكل احترافي.
  • يدعم لارافيل التحقق التلقائي، الرسائل المخصصة، وتنظيف البيانات قبل التحقق.

سجل بالدورة الأفضل والأشهر في مجال الويب