Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)
आज, हम Symfony रूटिंग कॉम्पोनेन्ट के माध्यम से जाएंगे, जो आपको अपने PHP ऍप्लिकेशन्स में रूटिंग सेट करने की अनुमति देता है।
Symfony रूटिंग कॉम्पोनेन्ट क्या है?
Symfony रूटिंग कॉम्पोनेन्ट एक बहुत लोकप्रिय रूटिंग कॉम्पोनेन्ट है जो कई फ्रेमवर्क द्वारा एडाप्ट किया जाता है और आप अपने PHP एप्लीकेशन में रूट सेटअप करना चाहते हैं, तो बहुत फ्लेक्सिबिलिटी प्रदान करता है।
यदि आपने एक कस्टम PHP एप्लिकेशन बनाया है और एक फीचर से समृद्ध रूटिंग लाइब्रेरी की तलाश में है, तो Symfony रूटिंग कॉम्पोनेन्ट एक लायक दिखने से बहुत अधिक है। यह आपको YAML फॉर्मेट में आपके एप्लिकेशन के लिए रूट परिभाषित करने की अनुमति देता है।
इंस्टालेशन और कॉन्फ़िगरेशन से शुरू होने पर, हम रूट कॉन्फ़िगरेशन के लिए कॉम्पोनेन्ट के विभिन्न ऑप्शंस को प्रदर्शित करने के लिए वास्तविक दुनिया के उदाहरणों के माध्यम से जायेंगे। इस लेख में, आप सीखेंगे:
- इंस्टालेशन और कॉन्फ़िगरेशन
- बेसिक रूट कैसे सेटअप करें
- YAML फ़ाइल से रूट कैसे लोड करें
- आल-इन-वन राऊटर का उपयोग कैसे करें
इंस्टालेशन और कॉन्फ़िगरेशन
इस सेक्शन में, हम आपके PHP ऍप्लिकेशन्स में रूटिंग सेट अप करने के लिए आवश्यक लाइब्रेरीज को सेटअप करने जा रहे हैं। मुझे लगता है कि आपने अपने सिस्टम में कंपोजर इनस्टॉल किया है क्योंकि हमें Packagist पर उपलब्ध आवश्यक लाइब्रेरीज को इनस्टॉल करने की आवश्यकता होगी।
एक बार जब आप कंपोजर इनस्टॉल कर लेंगे, तो आगे बढ़ें और निम्न कमांड का उपयोग कर कोर रूटिंग कॉम्पोनेन्ट इनस्टॉल करें।
$composer require symfony/routing
यद्यपि रूटिंग कॉम्पोनेन्ट स्वयं आपके एप्लीकेशन में व्यापक रूटिंग फीचर्स को प्रदान करने के लिए पर्याप्त है, फिर भी हम आगे बढ़ेंगे और कुछ अन्य कंपोनेंट्स को इनस्टॉल करेंगे, साथ ही साथ हमारे जीवन को आसान बनाने और मौजूदा कोर रूटिंग फंक्शनलिटी को समृद्ध करने के लिए भी।
आरंभ करने के लिए, हम आगे बढ़ेंगे और HttpFoundation कॉम्पोनेन्ट इनस्टॉल करेंगे, जो PHP ग्लोबल वेरिएबल और रिस्पांस-संबंधी फंक्शन्स के लिए ऑब्जेक्ट-ओरिएंटेड रैपर प्रदान करता है। यह सुनिश्चित करता है कि आपको $_GET
, $_POST
और सीधे की तरह ग्लोबल वेरिएबल्स तक पहुंचने की आवश्यकता नहीं है।
$composer require symfony/http-foundation
इसके बाद, यदि आप PHP कोड की बजाय YAML फ़ाइल में अपने एप्लिकेशन रूट को परिभाषित करना चाहते हैं, तो यह YAML कॉम्पोनेन्ट है जो बचाव के लिए आता है क्योंकि यह आपको YAML स्ट्रिंग्स को PHP arrays में परिवर्तित करने में मदद करता है और इसके विपरीत भी।
$composer require symfony/yaml
अंत में, हम कॉन्फ़िगरेशन कॉम्पोनेन्ट इनस्टॉल करेंगे, जो कई यूटिलिटी क्लासेज को प्रारंभ करने और विभिन्न प्रकार की फ़ाइल जैसे YAML, INI, XML इत्यादि में परिभाषित कॉन्फ़िगरेशन वैल्यूज के साथ सौदा करने के लिए प्रदान करता है। हमारे मामले में, हम इसे रूट लोड करने के लिए उपयोग करेंगे YAML फ़ाइल से।
$composer require symfony/config
तो यह इंस्टालेशन का हिस्सा है, लेकिन आप इसका उपयोग कैसे कर रहे हैं? वास्तव में, यह आपके एप्लीकेशन में Composer द्वारा बनाई गई autoload.php फ़ाइल को शामिल करने का विषय है, जैसा कि निम्न स्निपेट में दिखाया गया है।
<?php require_once './vendor/autoload.php'; // application code ?>
बेसिक रूट सेटअप करें
पिछले section में, हम आवश्यक रूटिंग कंपोनेंट्स की इंस्टालेशन के माध्यम से गए। अब, आप तुरंत अपने PHP एप्लिकेशन में रूटिंग सेट अप करने के लिए तैयार हैं।
आइए आगे बढ़ें और निम्न कंटेंट के साथ basic_routes.php फ़ाइल बनाएं।
<?php require_once './vendor/autoload.php'; use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\RequestContext; use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Routing\Exception\ResourceNotFoundException; try { // Init basic route $foo_route = new Route( '/foo', array('controller' => 'FooController') ); // Init route with dynamic placeholders $foo_placeholder_route = new Route( '/foo/{id}', array('controller' => 'FooController', 'method'=>'load'), array('id' => '[0-9]+') ); // Add Route object(s) to RouteCollection object $routes = new RouteCollection(); $routes->add('foo_route', $foo_route); $routes->add('foo_placeholder_route', $foo_placeholder_route); // Init RequestContext object $context = new RequestContext(); $context->fromRequest(Request::createFromGlobals()); // Init UrlMatcher object $matcher = new UrlMatcher($routes, $context); // Find the current route $parameters = $matcher->match($context->getPathInfo()); // How to generate a SEO URL $generator = new UrlGenerator($routes, $context); $url = $generator->generate('foo_placeholder_route', array( 'id' => 123, )); echo '<pre>'; print_r($parameters); echo 'Generated URL: ' . $url; exit; } catch (ResourceNotFoundException $e) { echo $e->getMessage(); }
Symfony रूटिंग कॉम्पोनेन्ट का उपयोग करके रूटिंग सेट करना आमतौर पर नीचे लिस्टेड स्टेप्स की एक सीरीज के माध्यम से जाता है।
- अपने प्रत्येक एप्लीकेशन रुट्स के लिए
Route
ऑब्जेक्ट शुरू करें। -
RouteCollection
ऑब्जेक्ट में सभीरूट
ऑब्जेक्ट्स जोड़ें। -
RequestContext
ऑब्जेक्ट को प्रारंभ करें जिसमें वर्तमान रिक्वेस्ट कॉन्टेक्स्ट जानकारी है। -
RouteCollection
ऑब्जेक्ट औरRequestContext
ऑब्जेक्ट को पास करकेUrlMatcher
ऑब्जेक्ट को प्रारंभ करें।
विभिन्न routes के लिए Route ऑब्जेक्ट शुरू करें
चलो आगे बढ़ें और एक प्रेट्टी बेसिक foo
रूट परिभाषित करें।
$foo_route = new Route( '/foo', array('controller' => 'FooController') );
Route
कन्स्ट्रक्टर का पहला आर्गुमेंट URI पाथ है, और दूसरा आर्गुमेंट कस्टम ऐट्रिब्यूट्स का array है जिसे आप वापस करना चाहते हैं जब यह विशेष रूट मेल खाता है। आम तौर पर, यह कंट्रोलर और मेथड का संयोजन होगा जिसे आप इस रूट से रिक्वेस्ट करते समय कॉल करना चाहते हैं।
इसके बाद, आइए पैरामीटरयुक्त रूट पर नज़र डालें।
$foo_placeholder_route = new Route( '/foo/{id}', array('controller' => 'FooController', 'method'=>'load'), array('id' => '[0-9]+') );
उपर्युक्त रूट URI से मेल खाता है जैसे foo/1
, foo/123
और इसी तरह। कृपया ध्यान दें कि हमने {id}
पैरामीटर को केवल न्यूमेरिक वैल्यूज तक सीमित कर दिया है, और इसलिए यह {id}
पैरामीटर को स्ट्रिंग के रूप में प्रदान किए जाने के बाद से foo/bar
जैसे URI से मेल नहीं खाएगा।
RouteCollection ऑब्जेक्ट में सभी रूट ऑब्जेक्ट्स जोड़ें
अगला स्टेप रूट ऑब्जेक्ट्स को जोड़ना है जिसे हमने पिछले सेक्शन में RouteCollection
ऑब्जेक्ट में प्रारंभ किया है।
$routes = new RouteCollection(); $routes->add('foo_route', $foo_route); $routes->add('foo_placeholder_route', $foo_placeholder_route);
जैसा कि आप देख सकते हैं, यह बहुत सरल है क्योंकि आपको रूट ऑब्जेक्ट्स जोड़ने के लिए RouteCollection
ऑब्जेक्ट के add
मेथड का उपयोग करने की आवश्यकता है। add
मेथड का पहला आर्गुमेंट रूट का नाम है, और दूसरा आर्गुमेंट रूट ऑब्जेक्ट है।
RequestContext
ऑब्जेक्ट प्रारंभ करें
इसके बाद, हमें RequestContext
ऑब्जेक्ट को प्रारंभ करने की आवश्यकता है, जिसमें वर्तमान रिक्वेस्ट कॉन्टेक्स्ट जानकारी है। जब हम UrlMatcher
ऑब्जेक्ट को प्रारंभ करते हैं तो हमें इस ऑब्जेक्ट की आवश्यकता होगी क्योंकि हम इसे एक पल में करेंगे।
$context = new RequestContext(); $context->fromRequest(Request::createFromGlobals());
UrlMatcher
ऑब्जेक्ट शुरू करें
अंत में, हमें रूट और कॉन्टेक्स्ट जानकारी के साथ UrlMatcher
ऑब्जेक्ट को प्रारंभ करने की आवश्यकता है।
// Init UrlMatcher object $matcher = new UrlMatcher($routes, $context);
अब, हमारे पास हमारे रुट्स से मेल खाने वाली हर चीज है।
रुट्स को मैच कैसे करें
यह UrlMatcher
ऑब्जेक्ट का match
मेथड है जो आपको पूर्वनिर्धारित रुट्स के सेट के खिलाफ किसी भी रूट से मिलान करने की अनुमति देता है।
match
मेथड URI को अपना पहला आर्गुमेंट मानती है और इसे पूर्वनिर्धारित रुट्स के खिलाफ मैच करने की कोशिश करती है। यदि रूट मिलता है, तो वह उस रूट से जुड़े कस्टम ऐट्रिब्यूट्स को वापस कर देता है। दूसरी ओर, यदि वर्तमान URI से जुड़े कोई रूट नहीं है तो यह ResourceNotFoundException
एक्सेप्शन थ्रो करता है।
$parameters = $matcher->match($context->getPathInfo());
हमारे मामले में, हमने वर्तमान URI को $context
ऑब्जेक्ट से प्राप्त करके प्रदान किया है। इसलिए, यदि आप http://your-domain/basic_routes.php/foo URL तक पहुंच रहे हैं, तो $context->getPathInfo()
foo
को लौटाता है, और हमने पहले ही foo
URI के लिए एक रूट परिभाषित कर दिया है, इसलिए इसे हमें निम्नलिखित वापस करें।
Array ( [controller] => FooController [_route] => foo_route )
अब, आगे बढ़ें और http://your-domain/basic_routes.php/foo/123 URL तक पहुंचकर पैरामीटरकृत रूट का परीक्षण करें।
Array ( [controller] => FooController [method] => load [id] => 123 [_route] => foo_placeholder_route )
यह काम करता है अगर आप देख सकते हैं कि id
पैरामीटर उपयुक्त वैल्यू 123
के साथ बाउंड है।
इसके बाद, आइए http://your-domain/basic_routes.php/unknown-route जैसे गैर-मौजूदा रूट तक पहुंचने का प्रयास करें, और आपको निम्न मैसेज दिखना चाहिए।
No routes found for "/unknown-route".
तो इस तरह आप match
मेथड का उपयोग कर रूट पा सकते हैं।
इसके अलावा, आप अपने एप्लीकेशन में लिंक उत्पन्न करने के लिए रूटिंग
कॉम्पोनेन्ट का भी उपयोग कर सकते हैं। प्रदान की गई RouteCollection
और RequestContext
ऑब्जेक्ट्स, UrlGenerator
आपको विशिष्ट रुट्स के लिए लिंक बनाने की अनुमति देता है।
$generator = new UrlGenerator($routes, $context); $url = $generator->generate('foo_placeholder_route', array( 'id' => 123, ));
generate
मेथड का पहला आर्गुमेंट रूट का नाम है, और दूसरा आर्गुमेंट वह array है जिसमें पैरामीटरयुक्त रूट होने पर पैरामीटर हो सकते हैं। उपरोक्त कोड को /basic_routes.php/foo/123 URL उत्पन्न करना चाहिए।
YAML फ़ाइल से लोड रूट्स
पिछले सेक्शन में, हमने Route
और RouteCollection
ऑब्जेक्ट्स का उपयोग करके हमारे कस्टम रूट बनाए। वास्तव में, Routing
कॉम्पोनेन्ट विभिन्न तरीकों की पेशकश करता है जिन्हें आप तुरंत रुट्स से चुन सकते हैं। आप YamlFileLoader
, XmlFileLoader
, और PhpFileLoader
जैसे विभिन्न लोडर से चुन सकते हैं।
इस सेक्शन में, हम YAML फ़ाइल से रूट लोड करने के तरीके को देखने के लिए YamlFileLoader
लोडर से गुज़रेंगे।
YAML फ़ाइल को रूट करें
आगे बढ़ें और निम्नलिखित कंटेंट के साथ routes.yaml फ़ाइल बनाएं।
foo_route: path: /foo defaults: { controller: 'FooController::indexAction' } foo_placeholder_route: path: /foo/{id} defaults: { controller: 'FooController::loadAction' } requirements: id: '[0-9]+'
एक उदाहरण फ़ाइल
इसके बाद, आगे बढ़ें और load_routes_from_yaml.php फ़ाइल को निम्न कंटेंट के साथ बनाएं।
<?php require_once './vendor/autoload.php'; use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\RequestContext; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Config\FileLocator; use Symfony\Component\Routing\Loader\YamlFileLoader; use Symfony\Component\Routing\Exception\ResourceNotFoundException; try { // Load routes from the yaml file $fileLocator = new FileLocator(array(__DIR__)); $loader = new YamlFileLoader($fileLocator); $routes = $loader->load('routes.yaml'); // Init RequestContext object $context = new RequestContext(); $context->fromRequest(Request::createFromGlobals()); // Init UrlMatcher object $matcher = new UrlMatcher($routes, $context); // Find the current route $parameters = $matcher->match($context->getPathInfo()); // How to generate a SEO URL $generator = new UrlGenerator($routes, $context); $url = $generator->generate('foo_placeholder_route', array( 'id' => 123, )); echo '<pre>'; print_r($parameters); echo 'Generated URL: ' . $url; exit; } catch (ResourceNotFoundException $e) { echo $e->getMessage(); }
इस मामले में जो एकलौती चीज जो अलग है वह है जिस तरह से हम रूट शुरू करते हैं!
$fileLocator = new FileLocator(array(__DIR__)); $loader = new YamlFileLoader($fileLocator); $routes = $loader->load('routes.yaml');
हमने YamlFileLoader
लोडर का उपयोग routes.yaml फाइल से रूट लोड करने के लिए किया है Yaml फ़ाइल को सीधे PHP में ही शुरू करने के बजाय। इसके अलावा, सब कुछ वही है और उसी परिणाम को basic_routes.php फ़ाइल के रूप में प्रस्तुत करना चाहिए।
ऑल-इन-वन राऊटर
अंत में इस सेक्शन में, हम Router
क्लास के माध्यम से जाएंगे, जो आपको कोड की कम लाइनों के साथ जल्दी से रूटिंग सेट करने की अनुमति देता है।
आगे बढ़ें और निम्नलिखित कंटेंट के साथ all_in_one_router.php फ़ाइल बनाएं।
<?php require_once './vendor/autoload.php'; use Symfony\Component\Routing\RequestContext; use Symfony\Component\Routing\Router; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Config\FileLocator; use Symfony\Component\Routing\Loader\YamlFileLoader; use Symfony\Component\Routing\Exception\ResourceNotFoundException; try { $fileLocator = new FileLocator(array(__DIR__)); $requestContext = new RequestContext(); $requestContext->fromRequest(Request::createFromGlobals()); $router = new Router( new YamlFileLoader($fileLocator), 'routes.yaml', array('cache_dir' => __DIR__.'/cache'), $requestContext ); // Find the current route $parameters = $router->match($requestContext->getPathInfo()); // How to generate a SEO URL $routes = $router->getRouteCollection(); $generator = new UrlGenerator($routes, $requestContext); $url = $generator->generate('foo_placeholder_route', array( 'id' => 123, )); echo '<pre>'; print_r($parameters); echo 'Generated URL: ' . $url; exit; } catch (ResourceNotFoundException $e) { echo $e->getMessage(); }
सब कुछ काफी उसी के समान है, सिवाय इसके कि हमने आवश्यक डेपेंडेन्सीज़ के साथ Router
ऑब्जेक्ट को तुरंत चालू कर दिया है।
$router = new Router( new YamlFileLoader($fileLocator), 'routes.yaml', array('cache_dir' => __DIR__.'/cache'), $requestContext );
उस जगह के साथ, आप सीधे रूट मैपिंग के लिए Router ऑब्जेक्ट के match
मेथड का उपयोग कर सकते हैं।
$parameters = $router->match($requestContext->getPathInfo());
इसके अलावा, आपको रूट लाने के लिए Router ऑब्जेक्ट की getRouteCollection
मेथड का उपयोग करने की आवश्यकता होगी।
$routes = $router->getRouteCollection();
निष्कर्ष
आगे बढ़ें और रूटिंग कॉम्पोनेन्ट में उपलब्ध अन्य ऑप्शंस का पता लगाएं- मुझे आपके विचार सुनना अच्छा लगेगा!
आज, हमने Symfony रूटिंग कॉम्पोनेन्ट की खोज की, जो PHP ऍप्लिकेशन्स में रूटिंग को कार्यान्वित करता है। रास्ते के साथ, हमने राउटिंग कॉम्पोनेन्ट के विभिन्न पहलुओं को प्रदर्शित करने के लिए कुछ उदाहरण दिए।
मुझे आशा है कि आपने इस लेख का आनंद लिया है, और नीचे दिए गए फ़ीड का उपयोग करके अपने विचार पोस्ट करने के लिए स्वतंत्र महसूस करें!
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly