CakePHP ফ্রেমওয়ার্কে ডেটা ভ্যালিডেশন একটি অত্যন্ত গুরুত্বপূর্ণ বিষয়, যা ডেটার সঠিকতা নিশ্চিত করে। CakePHP দুটি ভ্যালিডেশন পদ্ধতি প্রদান করে: Built-in Validation এবং Custom Validation। এখানে আমরা এই দুটি ভ্যালিডেশন পদ্ধতির সম্পর্কে বিস্তারিত আলোচনা করব এবং কিভাবে এগুলি ব্যবহার করা হয় তা দেখাবো।
১. Built-in Validation
CakePHP এর মধ্যে কিছু ডিফল্ট বা বিল্ট-ইন ভ্যালিডেশন রুল রয়েছে যা সাধারণত বেশিরভাগ পরিস্থিতিতে কাজ করে। এই বিল্ট-ইন ভ্যালিডেশনগুলি CakePHP Validator ক্লাসের মাধ্যমে পরিচালিত হয়।
১.১. Validator ক্লাসের ব্যবহার
CakePHP এ ডেটা ভ্যালিডেশন করার জন্য সাধারণত Table ক্লাসে একটি validationDefault() মেথড থাকে। এখানে বিভিন্ন বিল্ট-ইন ভ্যালিডেশন রুল যেমন notEmpty(), email(), minLength(), maxLength() ইত্যাদি ব্যবহার করা যায়।
উদাহরণ: একটি বিল্ট-ইন ভ্যালিডেশন রুল ব্যবহার করা
// src/Model/Table/ArticlesTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class ArticlesTable extends Table
{
public function validationDefault(Validator $validator): Validator
{
$validator
->notEmptyString('title', 'Title is required')
->minLength('title', 5, 'Title must be at least 5 characters')
->maxLength('title', 255, 'Title cannot be more than 255 characters')
->email('email', false, 'Please provide a valid email address')
->notEmptyString('body', 'Body is required');
return $validator;
}
}
notEmptyString(): এটি ফিল্ডটি খালি না হওয়ার জন্য ভ্যালিডেশন প্রদান করে।minLength(): এটি একটি ফিল্ডের মিনিমাম দৈর্ঘ্য চেক করে।maxLength(): এটি একটি ফিল্ডের ম্যাক্সিমাম দৈর্ঘ্য চেক করে।email(): এটি একটি ইমেইল ফিল্ডের ভ্যালিডিটি যাচাই করে।
১.২. বিল্ট-ইন রুলসের কিছু উদাহরণ
notEmptyString(): ফিল্ডটি খালি হতে দেওয়া যাবে না।email(): ফিল্ডের মান একটি বৈধ ইমেইল ঠিকানা হতে হবে।minLength(): ফিল্ডের মান একটি নির্দিষ্ট দৈর্ঘ্যের কম হতে পারবে না।maxLength(): ফিল্ডের মান একটি নির্দিষ্ট দৈর্ঘ্যের বেশি হতে পারবে না।numeric(): ফিল্ডের মান একটি সংখ্যা হতে হবে।
২. Custom Validation
যখন আপনি বিশেষ ধরনের ভ্যালিডেশন প্রয়োজন, যেমন নির্দিষ্ট শর্ত অনুযায়ী ভ্যালিডেশন তৈরি, তখন Custom Validation ব্যবহার করা হয়। CakePHP তে Custom Validation তৈরি করা খুব সহজ এবং আপনি নিজে একটি কাস্টম ভ্যালিডেশন রুল তৈরি করতে পারেন।
২.১. কাস্টম ভ্যালিডেশন রুল তৈরি করা
CakePHP তে কাস্টম ভ্যালিডেশন রুল তৈরি করতে আপনাকে Validator ক্লাসে একটি নতুন মেথড তৈরি করতে হবে যা আপনার কাস্টম শর্ত পূর্ণ করবে।
উদাহরণ: একটি কাস্টম ভ্যালিডেশন রুল তৈরি করা
// src/Model/Table/ArticlesTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class ArticlesTable extends Table
{
public function validationDefault(Validator $validator): Validator
{
$validator
->notEmptyString('title', 'Title is required')
->minLength('title', 5, 'Title must be at least 5 characters')
->maxLength('title', 255, 'Title cannot be more than 255 characters')
->add('body', 'custom', [
'rule' => [$this, 'validateBody'],
'message' => 'Body must not contain offensive words.',
])
->notEmptyString('body', 'Body is required');
return $validator;
}
// কাস্টম ভ্যালিডেশন মেথড
public function validateBody($value, $context)
{
$offensiveWords = ['badword1', 'badword2'];
foreach ($offensiveWords as $word) {
if (strpos($value, $word) !== false) {
return false; // যদি অপরাধমূলক শব্দ থাকে, ভ্যালিডেশন ফেল করবে
}
}
return true;
}
}
add(): কাস্টম ভ্যালিডেশন রুল যোগ করার জন্য ব্যবহৃত হয়।validateBody(): এটি একটি কাস্টম মেথড যাbodyফিল্ডের মানে অপরাধমূলক শব্দ চেক করে। যদি এমন শব্দ পাওয়া যায়, তাহলে ভ্যালিডেশন ফেল হবে।
২.২. কাস্টম ভ্যালিডেশন রুলের উদাহরণ
- ইমেইল ভ্যালিডেশন: একটি কাস্টম ভ্যালিডেশন তৈরি করে যাচাই করতে পারেন যে, একটি ইমেইল ঠিকানা একটি নির্দিষ্ট ডোমেইনে থাকতে হবে।
public function validateEmailDomain($value, $context)
{
$validDomains = ['example.com', 'mydomain.com'];
$domain = substr(strrchr($value, '@'), 1); // ইমেইল থেকে ডোমেইন বের করা
if (!in_array($domain, $validDomains)) {
return false;
}
return true;
}
- ফোন নম্বর ভ্যালিডেশন: ফোন নম্বরের জন্য একটি কাস্টম রুল তৈরি করতে পারেন যা শুধু নির্দিষ্ট ফরম্যাটে ফোন নম্বর গ্রহণ করবে।
public function validatePhoneNumber($value, $context)
{
return preg_match('/^\+?[1-9]\d{1,14}$/', $value); // ইন্টারন্যাশনাল ফোন নম্বর ফরম্যাট
}
৩. কাস্টম এবং বিল্ট-ইন ভ্যালিডেশন কম্বিনেশন
CakePHP এ আপনি বিল্ট-ইন এবং কাস্টম ভ্যালিডেশন রুলস একসাথে ব্যবহার করতে পারেন, যাতে আপনি প্রয়োজনীয় ভ্যালিডেশন ক্রাইটেরিয়া সম্পন্ন করতে পারেন।
উদাহরণ: কাস্টম এবং বিল্ট-ইন ভ্যালিডেশন একসাথে ব্যবহার
// src/Model/Table/UsersTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class UsersTable extends Table
{
public function validationDefault(Validator $validator): Validator
{
$validator
->notEmptyString('username', 'Username is required')
->minLength('username', 3, 'Username must be at least 3 characters')
->add('email', 'custom', [
'rule' => 'email',
'message' => 'Please enter a valid email address',
])
->add('email', 'unique', [
'rule' => 'validateUnique',
'provider' => 'table',
'message' => 'Email already exists',
])
->add('phone', 'custom', [
'rule' => [$this, 'validatePhoneNumber'],
'message' => 'Invalid phone number',
]);
return $validator;
}
public function validatePhoneNumber($value, $context)
{
return preg_match('/^\+?[1-9]\d{1,14}$/', $value);
}
}
এখানে, username এর জন্য বিল্ট-ইন notEmptyString() এবং minLength() ব্যবহার করা হয়েছে, email এর জন্য কাস্টম ভ্যালিডেশন এবং phone এর জন্য কাস্টম রুল ব্যবহার করা হয়েছে।
CakePHP তে Built-in Validation এবং Custom Validation দুটি খুবই শক্তিশালী বৈশিষ্ট্য। আপনি যখন সাধারণ ডেটা ভ্যালিডেশন চান, তখন বিল্ট-ইন রুলস ব্যবহার করতে পারেন, এবং যখন আপনার বিশেষ ধরনের ভ্যালিডেশন প্রয়োজন হয়, তখন কাস্টম ভ্যালিডেশন তৈরি করতে পারেন। CakePHP এর ভ্যালিডেশন সিস্টেম খুবই নমনীয় এবং কার্যকর, যা আপনার অ্যাপ্লিকেশনকে ডেটার সঠিকতা নিশ্চিত করতে সাহায্য করে।
Read more