Symfony/Validator PHP: पूर्ण गाइड, उदाहरण और उपयोग
1. यह क्या है और इसकी आवश्यकता क्यों है?
Symfony/Validator लाइब्रेरी Symfony इकोसिस्टम का एक शक्तिशाली और लचीला कम्पोनेंट है, जो डेटा वैलिडेशन के लिए डिज़ाइन किया गया है। सामान्य "ऑन-द-फ्लाई" जांचों के विपरीत, यह कम्पोनेंट एक डिक्लेरेटिव दृष्टिकोण प्रदान करता है: आप एनोटेशन, PHP 8+ एट्रीब्यूट्स, YAML, XML या PHP ऐरे के माध्यम से वैलिडेशन नियम (प्रतिबंध) परिभाषित करते हैं, और फिर डेटा को एक विशेष सेवा — ValidatorInterface को भेजते हैं। यह वैलिडेशन लॉजिक को एप्लिकेशन के बिज़नेस लॉजिक से अलग करता है, जिससे कोड अधिक साफ, परीक्षण योग्य और पुन: प्रयोग करने योग्य बनता है।
इसकी आवश्यकता क्यों है? किसी भी वेब एप्लिकेशन (और न केवल) में, डेटा अविश्वसनीय स्रोतों से आता है: वेबसाइट फॉर्म, API अनुरोध, CSV फ़ाइलों से इम्पोर्ट। वैलिडेशन के बिना, आप SQL इंजेक्शन, XSS अटैक, गलत गणना या डेटाबेस में "कचरा" होने का जोखिम उठाते हैं। Symfony/Validator इन समस्याओं को व्यापक रूप से हल करता है: यह डेटा प्रकार, स्ट्रिंग की लंबाई, संख्याओं की सीमा, ईमेल की विशिष्टता, रेगुलर एक्सप्रेशन से मिलान और बहुत कुछ जांचता है। इसके अलावा, यह सभी त्रुटियों को एक एकल ऑब्जेक्ट ConstraintViolationList में एकत्र करता है, जिसे API के लिए JSON प्रतिक्रिया में या फॉर्म पर त्रुटियों की सूची के रूप में आसानी से बदला जा सकता है।
यह कम्पोनेंट Symfony फ्रेमवर्क से पूरी तरह स्वतंत्र है। आप इसे किसी भी PHP प्रोजेक्ट (Laravel, Yii, अपना खुद का फ्रेमवर्क या यहां तक कि "शुद्ध" PHP) में उपयोग कर सकते हैं। यह सक्रिय रूप से समर्थित है, इसमें उत्कृष्ट दस्तावेज़ीकरण और एक बड़ा समुदाय है। यह PHP दुनिया में वैलिडेशन का "गोल्ड स्टैंडर्ड" है।
2. इंस्टॉलेशन
इंस्टॉलेशन Composer के माध्यम से किया जाता है। अपने प्रोजेक्ट की रूट डायरेक्टरी में टर्मिनल में निम्नलिखित चलाएँ:
composer require symfony/validator
नेस्टेड ऑब्जेक्ट्स और ऐरे के साथ सही ढंग से काम करने के लिए symfony/property-access कम्पोनेंट भी इंस्टॉल करने की सिफारिश की जाती है:
composer require symfony/property-access
यदि आप एनोटेशन/एट्रीब्यूट्स का उपयोग करने की योजना बना रहे हैं, तो सुनिश्चित करें कि आपके पास doctrine/annotations (PHP 7.x के लिए) इंस्टॉल है या आप नेटिव एट्रीब्यूट्स के साथ PHP 8+ का उपयोग कर रहे हैं।
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
आइए वैलिडेशन एट्रीब्यूट्स के साथ एक सरल User क्लास बनाएँ और इसे जाँचें।
<?php
// 1. Composer ऑटोलोडर को शामिल करें
require_once 'vendor/autoload.php';
// 2. आवश्यक क्लासेस को इम्पोर्ट करें
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints as Assert;
// 3. वैलिडेशन एट्रीब्यूट्स के साथ क्लास बनाएँ (PHP 8+)
class User {
#[Assert\NotBlank(message: "नाम खाली नहीं हो सकता")]
#[Assert\Length(min: 2, max: 50, minMessage: "नाम में कम से कम {{ limit }} अक्षर होने चाहिए")]
public string $name;
#[Assert\NotBlank]
#[Assert\Email(message: "ईमेल '{{ value }}' मान्य नहीं है।")]
public string $email;
#[Assert\PositiveOrZero]
public int $age;
}
// 4. वैलिडेटर बनाएँ
$validator = Validation::createValidatorBuilder()
->enableAttributeMapping() // एट्रीब्यूट सपोर्ट सक्षम करें
->getValidator();
// 5. गलत डेटा के साथ ऑब्जेक्ट बनाएँ
$user = new User();
$user->name = 'A'; // बहुत छोटा नाम
$user->email = 'not-an-email';
$user->age = -5;
// 6. वैलिडेट करें
$violations = $validator->validate($user);
// 7. त्रुटियों को संभालें
if (count($violations) > 0) {
foreach ($violations as $violation) {
echo $violation->getPropertyPath() . ': ' . $violation->getMessage() . "\n";
}
} else {
echo "डेटा मान्य है!";
}
यह उदाहरण आउटपुट देगा:
name: नाम में कम से कम 2 अक्षर होने चाहिए
email: ईमेल 'not-an-email' मान्य नहीं है।
age: यह मान धनात्मक या शून्य होना चाहिए।
4. मुख्य तरीके/फंक्शन/क्लासेस
4.1. Validation::createValidatorBuilder()
सिग्नेचर: