إنشاء قواعد Validation مخصصة في Laravel
المقدمة
في بعض الأحيان، قد تحتاج إلى التحقق من صحة المدخلات بناءً على متطلبات خاصة لا يمكن تغطيتها باستخدام قواعد التحقق المدمجة في Laravel. في مثل هذه الحالات، يمكنك إنشاء قواعد تحقق مخصصة للتحقق من البيانات بناءً على الشروط التي تحددها. يتيح لك Laravel إنشاء قواعد تحقق مخصصة بسهولة وإعادة استخدامها في جميع أنحاء التطبيق.
الخطوة 1: إنشاء قاعدة تحقق مخصصة
لإنشاء قاعدة تحقق مخصصة، يمكنك استخدام الأمر make:rule
الذي يوفره Laravel. لنقم بإنشاء قاعدة تحقق مخصصة للتحقق من أن الاسم يحتوي فقط على أحرف كبيرة:
php artisan make:rule Uppercase
سيتم إنشاء ملف Uppercase.php
في مجلد app/Rules
. افتح هذا الملف وستجد هيكل القاعدة الافتراضي. يمكنك تخصيص الملف لتعريف منطق التحقق:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Uppercase implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return strtoupper($value) === $value;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The :attribute must be uppercase.';
}
}
في هذا المثال، نقوم بإنشاء قاعدة تحقق مخصصة Uppercase
التي تتحقق مما إذا كان المدخل محوّلًا إلى أحرف كبيرة فقط. إذا كان المدخل يحتوي على أي أحرف صغيرة، فسيكون التحقق غير ناجح، وسيتم عرض رسالة الخطأ المحددة.
الخطوة 2: استخدام قاعدة التحقق المخصصة في المتحكم
بعد إنشاء قاعدة التحقق المخصصة، يمكنك استخدامها في متحكمات التطبيق. لنقم بتحديث متحكم UserController
لاستخدام قاعدة Uppercase
للتحقق من حقل الاسم:
<?php
namespace App\Http\Controllers;
use App\Rules\Uppercase;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function store(Request $request)
{
$validatedData = $request->validate([
'name' => ['required', new Uppercase],
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
]);
// حفظ البيانات في قاعدة البيانات أو معالجة أخرى
// ...
return redirect()->back()->with('success', 'تم التسجيل بنجاح!');
}
}
في هذا المثال، نستخدم قاعدة Uppercase
المخصصة للتحقق من أن حقل name
يحتوي فقط على أحرف كبيرة. إذا لم يكن التحقق ناجحًا، فسيتم عرض رسالة الخطأ المعرفة في القاعدة.
الخطوة 3: استخدام قاعدة التحقق المخصصة في قوالب Blade
يمكنك عرض رسائل الخطأ في قوالب Blade باستخدام الكتلة @error
كما هو الحال مع قواعد التحقق المدمجة. تأكد من تحديث النموذج لعرض رسائل الخطأ المناسبة:
<!-- resources/views/user/create.blade.php -->
<form action="{{ route('user.store') }}" method="POST">
@csrf
<div>
<label for="name">الاسم (أحرف كبيرة فقط):</label>
<input type="text" name="name" id="name" value="{{ old('name') }}">
@error('name')
<div style="color: red;">{{ $message }}</div>
@enderror
</div>
<div>
<label for="email">البريد الإلكتروني:</label>
<input type="email" name="email" id="email" value="{{ old('email') }}">
@error('email')
<div style="color: red;">{{ $message }}</div>
@enderror
</div>
<div>
<label for="password">كلمة المرور:</label>
<input type="password" name="password" id="password">
@error('password')
<div style="color: red;">{{ $message }}</div>
@enderror
</div>
<div>
<label for="password_confirmation">تأكيد كلمة المرور:</label>
<input type="password" name="password_confirmation" id="password_confirmation">
</div>
<button type="submit">تسجيل</button>
</form>
عندما يحاول المستخدم إدخال اسم لا يحتوي على أحرف كبيرة فقط، سيتم عرض رسالة الخطأ المعرفة في قاعدة Uppercase
.
الخطوة 4: اختبار قاعدة التحقق المخصصة
من المهم دائمًا اختبار قواعد التحقق المخصصة للتأكد من أنها تعمل كما هو متوقع. لنقم بإنشاء اختبار للتحقق من أن قاعدة Uppercase
تعمل بشكل صحيح:
php artisan make:test UppercaseRuleTest
افتح ملف الاختبار الذي تم إنشاؤه UppercaseRuleTest.php
في مجلد tests/Feature
وأضف الاختبارات التالية:
<?php
namespace Tests\Feature;
use App\Rules\Uppercase;
use Tests\TestCase;
class UppercaseRuleTest extends TestCase
{
/** @test */
public function it_passes_when_the_value_is_uppercase()
{
$rule = new Uppercase();
$this->assertTrue($rule->passes('name', 'JOHNDOE'));
}
/** @test */
public function it_fails_when_the_value_is_not_uppercase()
{
$rule = new Uppercase();
$this->assertFalse($rule->passes('name', 'JohnDoe'));
}
}
قم بتشغيل الاختبارات باستخدام الأمر php artisan test
للتحقق من أن القاعدة تعمل كما هو متوقع.
الخاتمة
يعد إنشاء قواعد تحقق مخصصة في Laravel طريقة فعالة لضمان أن بيانات المستخدم تتوافق مع متطلبات محددة غير مشمولة بالقواعد المدمجة. باستخدام قواعد التحقق المخصصة، يمكنك تعزيز سلامة البيانات وتحسين تجربة المستخدم في تطبيقاتك. استمر في استكشاف ميزات Laravel المختلفة لتحسين تطبيقاتك وتوسيع نطاقها.
اترك تعليقاً