لارافيل Validation - الجزء الرابع - required_unless, required_with, required_with_all, required without, required without all

لارافيل Validation - الجزء الرابع - required_unless, required_with, required_with_all, required without, required without all

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

required_unless

تستخدم اذا كان لدي حقلين، إذا كان الحقل الأول يحتوي على قيمة معينة مثلا (1,2,3)، فإن الحقل الثاني لا يصبح مطلوب، أما إذا إحتوى على قيم أخرى غير (1,2,3) فإن الحقل الثاني يجب ان يكون مطلوب.

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

<form action="{{route('validation.store')}}" method="POST">
    @csrf
    <div class="container">
        @error('title')
        <div class="alert alert-danger">{{$message}}</div>
        @enderror
        <div class="mb-3">
            <input type="text" class="form-control" value="{{ old('title') }}" name="title">
        </div>
        @error('title2')
        <div class="alert alert-danger">{{$message}}</div>
        @enderror
        <div class="mb-3">
            <input type="text" class="form-control" value="{{ old('title1') }}" name="title2">
        </div>
        <button type="submit" class="btn btn-primary">Add</button>
    </div>
</form>

وكان لدي التحقق التالي

$request->validate([
    'title'=>'required',
    'title2'=>'required_unless:title,1,2,3',
]);

كما نلاحظ في التحقق، أنه في title2 قمنا بتحديد أنه إذا كان الحقل title يحتوي على قيم غير 1,2,3 فإن الحقل title2 غير إجباري، أما إذا إحتوى على قيم أخرى فإن الحقل title2 ليس إجباري.

إذا كانت قيمة title1 تساوي ethar مثلا، وكان title2 فارغ فإننا سوف نحصل على الخطأ التالي



required_with

تستخدم في حال لدي أكثر من حقل، بحيث يصبح الحقل الثاني مطلوب اذا كان الحقل الأول يحتوي على قيمة.

مثلا لدي فورم يحتوي على حقلين، واحد للدولة، والأخر للمدينة، هنا أريد إذا تم إختيار الدولة أن يكون المدينة إجباري، أما إذا كان حقل الدولة null فإن حقل المدينة يصبح غير إجباري.

<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-select mb-2">
            <option selected value="">Country</option>
            <option value="Palestine">Palestine</option>
            <option value="Jordan">Jordan</option>
        </select>
        @error('City')
        <div class="alert alert-danger">{{$message}}</div>
        @enderror
        <select name="City" class="form-select mb-2">
            <option selected value="">City</option>
            <option value="Jerusalem">Jerusalem</option>
            <option value="Amman">Amman</option>
        </select>
        <button type="submit" class="btn btn-primary">Add</button>
    </div>
</form>

للتحقق أستخدم

$request->validate([
    'Country'=>'sometimes|nullable',
    'City'=>'required_with:Country',
]);

أما إذا تم إدخال قيمة في Country ولم يتم إدخال قيمة في City فسوف يظهر الخطأ التالي

كذلك لو كان لدي حقل ثالث، ولا يصبح إجباري إلا إذا تم تعبئة الحقلين السابقين، مثلا للمثال أعلاه سوف أضيف حقل street ولا يصبح إجباري إلا إذا كان Country و City يحتوي على بيانات

$request->validate([
    'Country'=>'sometimes|nullable',
    'City'=>'sometimes|nullable',
    'Street'=>'required_with:Country,City',
]);


required_with_all

شبيه بـ required_with، حيث تستخدم في حال وجود أكثر من input، ففي المثال أعلاه يمكن إضافتها إلى Street حيث إذا إحتوى على حقلي Country, City على بيانات فإن حقل Street يصبح إجباري. 

$request->validate([
    'country'=>'sometimes|nullable',
    'city'=>'sometimes|nullable',
    'street'=>'required_with_all:country,city',
]);

وإذا تم إدخال Country, City ولم يتم إدخال حقل Street فإننا سوف نحصل على الخطأ التالي



required without

هو عكس required_with، بحيث إذا كان أي من حقلي Country, City قيمتهما تساوي null فإنه يجب ان تكون قيمة Street لا تساوي null، أما إذا كانت قيمة أي من حقلي Country, City لا تساوي null فإن الحقل Street يصبح ليس إجباري ان يرسل بيانات.

$request->validate([
    'country'=>'sometimes|nullable',
    'city'=>'sometimes|nullable',
    'street'=>'required_without:country,city',
]);

إذا تم إرسال الـ form ولم يتم تعبئة أي من الحقول سوف نحصل على الخطأ التالي



required without all

هنا يجب ان يكون الحقل Street لا يساوي null إذا كان الحقلي City, Country يساويان null.

$request->validate([
    'country'=>'sometimes|nullable',
    'city'=>'sometimes|nullable',
    'street'=>'required_without_all:country,city',
]);

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



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