لارافيل Validation - الجزء الثامن gt , gte, lt, lte, in, not_in, present, filled, confirmed , exists

لارافيل Validation - الجزء الثامن gt , gte, lt, lte, in, not_in, present, filled, confirmed , exists

2024-05-14 وقت القراءه : 4 دقائق

exists

تستخدم لحماية العلاقات، مثلا إذا كان لدي فورم يتم به عرض الدول على شكل select box وتم جلب هذه الدول من حقل countries في قاعدة البيانات، ولدي input بحيث يقوم المستخدم بإدخال المدن، بحيث يتم إدخال البيانات في جدول cities، حيث يتم تسجيل إسم المدينة و country_id، في هذه الحالة يفضل ان نتأكد من أن id الدولة الذي قام المستخدم بإختياره موجود فعلا في قاعدة البيانات.

 ويمكن التحقق من خلال الدالة exists مضاف اليها إسم الجدول وإسم الحقل

لفرض لدي الفورم التالي

<form action="{{route('validation.store')}}" method="POST">
    @csrf
    <div class="container">
        @error('Country')
        <div class="alert alert-danger">{{$message}}</div>
        @enderror
        <select name="Country" class="form-control mb-2">
            <option value="">Please Choose Country</option>
            @foreach($countries as $country)
                <option value="{{$country->id}}">{{$country->name}}</option>
            @endforeach
        </select>
        @error('city')
        <div class="alert alert-danger">{{$message}}</div>
        @enderror
        <input type="text" value="{{ old('city') }}" name="city" class="form-control mb-2"/>
        <button type="submit"  class="btn btn-primary">Add</button>
    </div>
</form>
$request->validate([
    'Country'=>'required|integer|exists:countries,id',
    'city'=>'required',
]);

وفي حال قام المستخدم بالتلاعب في قيم select box التي تم عرضها فإننا سوف نحصل على الخطأ التالي 

كما يمكن أيضا كتابة الـ model في التحقق وليس إسم الجدول

$request->validate([
    'Country'=>'required|integer|exists:App\Models\Country,id',
    'city'=>'required',
]);


gt

ويقصد بها  greate than في min و max كنا نحدد القيمة الأعلى والأقل التي يجب إدخالها، لكن هنا نحدد أن المدخل يجب أن يكون أكبر من  

$request->validate([
    'score'=>'required|gt:5',
]);

هنا إذا كانت قيمة score تساوي أو أقل من 5 سوف نحصل على الخطأ التالي



 gte

في حال أردنا أن القيمة أكبر من أو تساوي

$request->validate([
    'score'=>'required|gte:5',
]);


lt

هي عكس gt وهي بمعنى less than أي أقل من

$request->validate([
    'score'=>'required|lt:5',
]);


lte

وتعني أقل من أو يساوي

$request->validate([
    'score'=>'required|lte:5',
]);

كذلك يمكن عمل دمج بين حقلين بحيث تكون قيمة الحقل الثاني أقل من قيمة الحقل الأول

$request->validate([
    'score'=>'required|lte:5',
    'score2'=>'required|lte:score',
]);


in and not in

in

بمعنى أن القيم بجب ان تساوي قيم معينة يتم تحديدها في validation

$request->validate([
    'score'=>'required|in:10,20,30',
]);

هنا اذا كانت قيمة الـ input score ليست 10,20,30 فسوف يعطي خطئ

 



not in

عكس in بمعنى ان القيم لا يجب ان تساوي القيم التي يتم تحديدها في validation

$request->validate([
    'score'=>'required|not_in:10,20,30',
]);


present

لفرض أن لدي فورم، وقام أحد المستخدمين بعمل inspect element بالمتصفح، وقام بإخفاءه، ولنتحقق أنه لم يتم التلاعب بالـ input نستخدم present

$request->validate([
    'score'=>'present',
]);

فلا يهم الدالة present أن الحقل له قيمة أم لا، بل يهمها ان يكون الحقل موجود

 



filled

بمعنى اذا كان من ضمن الحقل المرسلة حقل بإسم score، إذا يجب ان يكون إجباري

$request->validate([
    'score'=>'filled',
]);


confirmed

تستخدم غالبا في الفورم الذي يتطلب إدخال كلمة مرور، وتأكيد كلمة المرور، بحيث يجب ان تكون القيمتان متساويتان

 فلو كان لدي الفورم التالي

<form action="{{route('validation.store')}}" method="POST">
    @csrf
    <div class="container">
        @error('password')
            <div class="alert alert-danger">{{$message}}</div>
        @enderror
        <input type="password" name="password" class="form-control"/>
        <input type="password" name="password_confirmation" class="form-control"/>
        <button type="submit" class="btn btn-primary">Add</button>
    </div>
</form>

كما نلاحظ أن حقل إعاده كلمة المرور يجب أن يكون بإسم password_confirmation

 كود التحقق

$request->validate([
    'password'=>'required|confirmed',
]);




التعليقات
شكر وامتنان
منذ سنتين

يعطيك العافية مهندسنا الفاضل ما شاء الله عنك وعلى معلوماتك وعلى مدونتك الرائعة استفدت منها كتير ربنا يجازيك كل خير يارب وبالتوفيق دوما

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