المدقق
يمكنك استخدام العديد من المدققين المتاحة مباشرة من خلال composer، على سبيل المثال:
top-think/think-validate
respect/validation
المدقق top-think/think-validate
الوصف
مدقق رسمي لـ ThinkPHP
عنوان المشروع
https://github.com/top-think/think-validate
التثبيت
composer require topthink/think-validate
البدء السريع
أنشئ app/index/validate/User.php
<?php
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
protected $rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
protected $message = [
'name.require' => 'الاسم مطلوب',
'name.max' => 'يجب ألا يتجاوز الاسم 25 حرفًا',
'age.number' => 'يجب أن يكون العمر رقمًا',
'age.between' => 'يجب أن يكون العمر بين 1 و 120',
'email' => 'صيغة البريد الإلكتروني غير صحيحة',
];
}
الاستخدام
$data = [
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com',
];
$validate = new \app\index\validate\User;
if (!$validate->check($data)) {
var_dump($validate->getError());
}
المدقق workerman/validation
الوصف
هذا المشروع هو نسخة مترجمة لـ https://github.com/Respect/Validation
عنوان المشروع
https://github.com/walkor/validation
التثبيت
composer require workerman/validation
البدء السريع
<?php
namespace app\controller;
use support\Request;
use Respect\Validation\Validator as v;
use support\Db;
class IndexController
{
public function index(Request $request)
{
$data = v::input($request->post(), [
'nickname' => v::length(1, 64)->setName('اللقب'),
'username' => v::alnum()->length(5, 64)->setName('اسم المستخدم'),
'password' => v::length(5, 64)->setName('كلمة المرور')
]);
Db::table('user')->insert($data);
return json(['code' => 0, 'msg' => 'جيد']);
}
}
من خلال jquery
$.ajax({
url : 'http://127.0.0.1:8787',
type : "post",
dataType:'json',
data : {nickname:'توم', username:'توم كات', password: '123456'}
});
النتيجة:
{"code":500,"msg":"اسم المستخدم يجب أن يحتوي فقط على حروف (a-z) وأرقام (0-9)"}
الملاحظات:
v::input(array $input, array $rules)
يُستخدم للتحقق وجمع البيانات، إذا فشل التحقق، سيثير استثناء Respect\Validation\Exceptions\ValidationException
، في حال نجاح التحقق، سيتم إرجاع البيانات المحققة (كمصفوفة).
إذا لم يتم التقاط استثناء التحقق بواسطة الكود التجاري، ستقوم الهيكل الأساسي لـ webman بالتقاطه تلقائيًا ويختار إما إرجاع بيانات json (مثل {"code":500, "msg":"xxx"}
) أو صفحة استثناء عادية اعتمادًا على رأس الطلب HTTP. في حال عدم تطابق العملية مع متطلبات العمل، يمكن للمطورين التقاط استثناء ValidationException
يدويًا وإرجاع البيانات المطلوبة، مثل الاستثناء التالي:
<?php
namespace app\controller;
use support\Request;
use Respect\Validation\Validator as v;
use Respect\Validation\Exceptions\ValidationException;
class IndexController
{
public function index(Request $request)
{
try {
$data = v::input($request->post(), [
'username' => v::alnum()->length(5, 64)->setName('اسم المستخدم'),
'password' => v::length(5, 64)->setName('كلمة المرور')
]);
} catch (ValidationException $e) {
return json(['code' => 500, 'msg' => $e->getMessage()]);
}
return json(['code' => 0, 'msg' => 'جيد', 'data' => $data]);
}
}
دليل ميزات المدقق
use Respect\Validation\Validator as v;
// التحقق من قاعدة واحدة
$number = 123;
v::numericVal()->validate($number); // true
// التحقق من سلسلة من القواعد
$usernameValidator = v::alnum()->noWhitespace()->length(1, 15);
$usernameValidator->validate('alganet'); // true
// الحصول على سبب فشل التحقق الأول
try {
$usernameValidator->setName('اسم المستخدم')->check('alg anet');
} catch (ValidationException $exception) {
echo $exception->getMessage(); // اسم المستخدم يجب أن يحتوي فقط على حروف (a-z) وأرقام (0-9)
}
// الحصول على جميع أسباب فشل التحقق
try {
$usernameValidator->setName('اسم المستخدم')->assert('alg anet');
} catch (ValidationException $exception) {
echo $exception->getFullMessage();
// سيطبع
// - اسم المستخدم يجب أن يتوافق مع القواعد التالية
// - اسم المستخدم يجب أن يحتوي فقط على حروف (a-z) وأرقام (0-9)
// - اسم المستخدم لا ينبغي أن يحتوي على مسافات
var_export($exception->getMessages());
// سيطبع
// array (
// 'alnum' => 'اسم المستخدم يجب أن يحتوي فقط على حروف (a-z) وأرقام (0-9)',
// 'noWhitespace' => 'اسم المستخدم لا ينبغي أن يحتوي على مسافات',
// )
}
// تخصيص رسالة الخطأ
try {
$usernameValidator->setName('اسم المستخدم')->assert('alg anet');
} catch (ValidationException $exception) {
var_export($exception->getMessages([
'alnum' => 'اسم المستخدم يجب أن يحتوي فقط على الحروف والأرقام',
'noWhitespace' => 'الاسم لا ينبغي أن يحتوي على مسافات',
'length' => 'حسنًا'
]);
// سيطبع
// array(
// 'alnum' => 'اسم المستخدم يجب أن يحتوي فقط على الحروف والأرقام',
// 'noWhitespace' => 'الاسم لا ينبغي أن يحتوي على مسافات'
// )
}
// التحقق من الكائن
$user = new stdClass;
$user->name = 'Alexandre';
$user->birthdate = '1987-07-01';
$userValidator = v::attribute('name', v::stringType()->length(1, 32))
->attribute('birthdate', v::date()->minAge(18));
$userValidator->validate($user); // true
// التحقق من المصفوفة
$data = [
'parentKey' => [
'field1' => 'value1',
'field2' => 'value2'
'field3' => true,
]
];
v::key(
'parentKey',
v::key('field1', v::stringType())
->key('field2', v::stringType())
->key('field3', v::boolType())
)
->assert($data); // يمكن أيضا استخدام check() أو validate()
// التحقق الاختياري
v::alpha()->validate(''); // false
v::alpha()->validate(null); // false
v::optional(v::alpha())->validate(''); // true
v::optional(v::alpha())->validate(null); // true
// قاعدة سلبية
v::not(v::intVal())->validate(10); // false
الفرق بين الأساليب validate()
check()
assert()
للمدقق
validate()
تعيد قيمة بولية، ولا تثير استثناءات
check()
تثير استثناء عند فشل التحقق، ويمكن الحصول على السبب الأول للفشل من خلال $exception->getMessage()
assert()
تثير استثناء عند فشل التحقق، ويمكن الحصول على جميع أسباب الفشل التحقق من خلال $exception->getFullMessage()
قائمة شائعة الاستخدام لقواعد التحقق
Alnum()
فقط حروف وأرقام
Alpha()
فقط حروف
ArrayType()
نوع المصفوفة
Between(mixed $minimum, mixed $maximum)
التحقق من أن الإدخال بين قيمتين معينتين.
BoolType()
التحقق من أنها من النوع البولي
Contains(mixed $expectedValue)
التحقق من أن الإدخال يحتوي على قيم معينة
ContainsAny(array $needles)
التحقق من أن الإدخال يحتوي على واحد على الأقل من القيم المحددة
Digit()
التحقق من أن الإدخال يحتوي على أرقام فقط
Domain()
التحقق من صحة اسم النطاق
Email()
التحقق من أنها بريد إلكتروني صحيح
Extension(string $extension)
التحقق من امتداد الملف
FloatType()
التحقق من أنها من النوع عشري
IntType()
التحقق من أنها عدد صحيح
Ip()
التحقق من أنها عنوان IP
Json()
التحقق من أنها بيانات json
Length(int $min, int $max)
التحقق من أن الطول في النطاق المحدد
LessThan(mixed $compareTo)
التحقق من أن الطول أقل من القيمة المحددة
Lowercase()
التحقق من أنها حروف صغيرة
MacAddress()
التحقق من أنها عنوان MAC
NotEmpty()
التحقق من أن الإدخال ليس فارغًا
NullType()
التحقق من أن الإدخال هو فارغ
Number()
التحقق من أن الإدخال عدد
ObjectType()
التحقق من أن الإدخال من نوع كائن
StringType()
التحقق من أن الإدخال من نوع سلسلة
Url()
التحقق من أن الإدخال عنوان URL
لمزيد من قواعد التحقق يرجى زيارة https://respect-validation.readthedocs.io/en/2.0/list-of-rules/
المزيد
لمزيد من المعلومات يُرجى زيارة https://respect-validation.readthedocs.io/en/2.0/