تستخدم في حال أن المدخلات على شكل مصفوفة، ولا أريد أن تتكرر قيم المدخلات
لو كان لدي الفورم التالي
<form action="{{route('validation.store')}}" method="POST"> @csrf <div class="container"> @if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <input type="text" value="{{ old('score.0') }}" name="score[]" class="form-control"/> <input type="text" value="{{ old('score.1') }}" name="score[]" class="form-control"/> <button type="submit" class="btn btn-primary">Add</button> </div> </form>
كما نلاحظ أن score هي عباره عن مصفوفة، فإذا أردنا أن لا تتكرر قيم المدخلات، يمكن إستخدام distinct
$request->validate([ 'score'=>'required|array', 'score.*'=>'distinct', ]);
أما في حال تكرار قيمة المدخلات فسوف نحصل على الخطأ التالي
لكن يجب الإنتباه، أنه غير حساس لحالة الأحرف فلو تم إدخال a في الحقل الأول و A في الحقل الثاني، فإن التحقق سوف يقبلها، ولجعلة حساس لحالة الأحرف نضيف إلى distinct خيار أخر وهو ignore_case
$request->validate([ 'score'=>'required|array', 'score.*'=>'distinct:ignore_case', ]);
لفرض أن لدينا فورم لإدخال البريد الإلكتروني، وأريد أن يتم التسجيل فقط من خلال gmail أستخدم ends_with:gmail.com
فلو كان لدي الفورم التالي لإدخال البريد الإلكتروني وأريد التحقق أن البريد الإلكتروني يكون فقط Gmail
$request->validate([ 'email'=>'required|ends_with:gmail.com', ]);
<form action="{{route('validation.store')}}" method="POST"> @csrf <div class="container"> @error('email') <div class="alert alert-danger">{{$message}}</div> @enderror <input type="text" value="{{ old('email') }}" name="email" class="form-control"/> <button type="submit" class="btn btn-primary">Add</button> </div> </form>
وإذا كان البريد الإلكتروني ليس gmail فسوف أحصل على الخطأ التالي
أما إذا كنا نريد أن نسمح لأكثر من مزود بريد إلكتروني مثلا gmail.com, yahoo.com, hotmail.com
$request->validate([ 'email'=>'required|ends_with:gmail.com,yahoo.com,hotmail.com', ]);
هي عكس end_with، لفرض أن لدي حقل لتعبئة رقم الهاتف، وأريد أن أتأكد ان المدخل يبدأ بـ 00970
<form action="{{route('validation.store')}}" method="POST"> @csrf <div class="container"> @error('tel') <div class="alert alert-danger">{{$message}}</div> @enderror <input type="text" value="{{ old('tel') }}" name="tel" class="form-control"/> <button type="submit" class="btn btn-primary">Add</button> </div> </form> $request->validate([ 'tel'=>'required|starts_with:00070', ]);
كذلك يمكن إضافة أكثر من قيمة للتحقق
$request->validate([ 'tel'=>'required|starts_with:00070,00966,00962', ]);
وإذا كانت القيمة غيرر المسموح بها سوف أحصل على الخطأ التالي
يتم إسخدامها في حال وجود أكثر من input بحيث يكون الحقل الثاني إجباري، إذا إحتوى الحقل الأول على قيمة معينة
لفرض لدي الفورم التالي
<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"> <option value="">الرجاء إختيار الدولة</option> <option value="Palestine">Palestine</option> <option value="Jordan">Jordan</option> </select> @error('tel') <div class="alert alert-danger">{{$message}}</div> @enderror <input type="text" value="{{ old('tel') }}" name="tel" class="form-control"/> <button type="submit" class="btn btn-primary">Add</button> </div> </form>
وأريد إذا تم تم إختيار Palestine في حقل Country ان يكون tel غير إجباري، أما إذا تم إختيار دولة أخرى أن يكون إجباري
$request->validate([ 'Country'=>'required', 'tel'=>'exclude_if:Country,Palestine|required', ]);
هي عكس excluded_if بحيث لا يصبح حقل tel إجباري إلا إذا كانت قيمة Country=Palestine
$request->validate([ 'Country'=>'required', 'tel'=>'exclude_unless:Country,Palestine|required', ]);
hasan
السلام عليكم اذا عندي حقل وليكن اسمه complete واخر اسمه feedback_status وكان هناك شرط لو قيمه حقل complete =100 وكان حقل feedback_status=PROCESSING اريد ينطي validation على انه حقل feedback_status لازم لايساوي PROCESSING انا حاليا عامله بهذه طريقه if($value[\'complete\'] == 100 && $value[\'feedback_status\'] ===\"PROCESSING\" ){ $value[\'feedback_status\']=\'\'; } وضعت في message \'feedback_status.required\' =>\"If complete is equal 100 the field feedback_status must be not set to PROCESSING\", الحاله الثانيه اذا كان يوزر ليس له لديه صلاحيه اريد امنعه من ادخال البيانات حاليا عامله بهذه طريقه $location=$value[\'location\']; if(in_array($location,$array_all_dgs,true)){ if(!$this->auth->hasPermission(\'electrical_database_\'.$location.\'-DGS\')){ $value[\'location\']=\'\'; } } وفي message \'location.required\' =>\"1-The field LOCATION required. 2-Maybe You don\'t have permission in this DGS you can\'t update\", سؤال هنا هل ب laravel توجد امكانيه وضع تلك شروط ضمن rules بحيث اريد اختصر كود واريده يصير نظامي اكثر