ভ্যালিডেটর
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' => 'নাম সর্বাধিক ২৫ অক্ষরের হতে হবে',
'age.number' => 'বয়স সংখ্যা হতে হবে',
'age.between' => 'বয়স ১-১২০ এর মধ্যে হতে হবে',
'email' => 'ইমেইল ফরম্যাট ভুল',
];
}
ব্যবহার
$data = [
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com',
];
$validate = new \app\index\validate\User;
if (!$validate->check($data)) {
var_dump($validate->getError());
}
মনোযোগ
webman এ think-validate এরValidate::rule()
পদ্ধতির সমর্থন নেই।
ভ্যালিডেটর 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 ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে এটিকে ধরবে এবং HTTP অনুরোধের শিরোনাম অনুযায়ী json তথ্য ফেরত দেবে (যেমন {"code":500, "msg":"xxx"}
) অথবা সাধারণ ব্যতিক্রম পৃষ্ঠা। যদি ফেরত দেয়া ফরম্যাট ব্যবসার জন্য প্রয়োজনের সাথে মেলে না, ডেভেলপার স্বয়ংক্রিয়ভাবে 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]);
}
}
Validator কার্যকারিতা নির্দেশিকা
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' => '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
Validator তিনটি পদ্ধতির মধ্যে পার্থক্য 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()
যাচাই করে এটি কি আইপি ঠিকানা
Json()
যাচাই করে এটি কি জেসন ডেটা
Length(int $min, int $max)
যাচাই করে দৈর্ঘ্য কি দেওয়া সীমাতে রয়েছে
LessThan(mixed $compareTo)
যাচাই করে দৈর্ঘ্য কি প্রদত্ত মানের চেয়ে কম
Lowercase()
যাচাই করে এটি কি ছোট হাতের অক্ষর
MacAddress()
যাচাই করে এটি কি ম্যাক ঠিকানা
NotEmpty()
যাচাই করে এটি কি শূন্য নয়
NullType()
যাচাই করে এটি কি null
Number()
যাচাই করে এটি কি সংখ্যা
ObjectType()
যাচাই করে এটি কি অবজেক্ট
StringType()
যাচাই করে এটি কি স্ট্রিং টাইপ
Url()
যাচাই করে এটি কি url
আরো যাচাই নিয়ম দেখুন https://respect-validation.readthedocs.io/en/2.0/list-of-rules/
আরো তথ্য
ব্রাউজ করুন https://respect-validation.readthedocs.io/en/2.0/