Drupal मॉड्यूल में प्रोग्रामेटिक रूप से पेज बनाना
Drupal में एक साधारण पेज बनाने के दो चरण होते हैं:
पथ और उसके параметры घोषित करें।
इस चरण में पेज का शीर्षक, पेज तक पहुँच की आवश्यकताएँ और अन्य शामिल होते हैं।
Drupal 7 में आपको hook_menu() को реализ करना होता था।
Drupal 8 में मॉड्यूल की रूट डायरेक्टरी में <module_name>.routing.yml फ़ाइल बनाएँ।
पेज का बॉडी लौटाने के लिए कोड लिखें।
Drupal 7 में आपको hook_menu() में निर्दिष्ट पेज callback फ़ंक्शन लिखना होता था।
Drupal 8 में पेज callback या तो किसी क्लास का मेथड होना चाहिए या फिर रजिस्टर्ड सर्विस। यह विभिन्न स्थितियों (HTTP या HTTPS, कंटेंट हेडर्स आदि) पर निर्भर कर सकता है, लेकिन यह इस परिचय के दायरे से बाहर है।
प्रक्रिया
इस पेज के उदाहरण का पालन करके, आप अपने कस्टम मॉड्यूल में एक साधारण पेज बना सकेंगे, बिना Drupal की आंतरिक संरचना के बारे में ज्यादा जाने। अधिक जानकारी के लिए चेंजलॉग देखें, जिसमें राउटिंग सिस्टम में बदलाव और कोर व प्रोजेक्ट उदाहरणों में विभिन्न इम्प्लीमेंटेशन दिए गए हैं।
उदाहरण मॉड्यूल के लिए राउटिंग YAML फ़ाइल
राउटिंग जानकारी example/example.routing.yml में रखी जाती है:
example.my_page:
path: '/mypage/page'
defaults:
_controller: '\Drupal\example\Controller\ExampleController::myPage'
_title: 'My first page in D8'
requirements:
_permission: 'access content'
example.my_page
- यह रूट का मशीन-नाम है। परंपरा के अनुसार रूट मशीन नाम
module_name.sub_nameहोने चाहिए। जब कोड के अन्य भाग रूट को संदर्भित करेंगे, तो वे मशीन-नाम का उपयोग करेंगे।
path
- यह आपकी साइट पर पेज का पथ देता है। ध्यान दें कि यह स्लैश (/) से शुरू होता है।
defaults
- यह पेज और शीर्षक के callback को बताता है। @todo: ये डिफ़ॉल्ट मान कहाँ override किए जा सकते हैं?
requirements
- यह निर्धारित करता है कि किन शर्तों पर पेज प्रदर्शित होगा। आप permissions, आवश्यक मॉड्यूल और अन्य शर्तें निर्दिष्ट कर सकते हैं।
उदाहरण मॉड्यूल के लिए पेज का इम्प्लीमेंटेशन
Controller क्लास ExampleController को example/src/Controller/ExampleController.php में परिभाषित किया जाना चाहिए:
<?php
namespace Drupal\example\Controller;
use Drupal\Core\Controller\ControllerBase;
/**
* Provides route responses for the Example module.
*/
class ExampleController extends ControllerBase {
/**
* Returns a simple page.
*
* @return array
* A simple renderable array.
*/
public function myPage() {
$element = array(
'#markup' => 'Hello, world',
);
return $element;
}
}
namespace (नामस्थान)
- यह prefix घोषित करता है, जो हमारे परिभाषित किए गए क्लास के नाम को पूर्ण रूप से परिभाषित करने के लिए आवश्यक है। डॉकब्लॉक और क्लास नाम की तुलना करें। क्लास ऑटोलोडर जानता है कि \Drupal\example\Controller\ExampleController क्लास को खोजने के लिए उसे modules/example/src/Controller/ExampleController.php फ़ाइल देखनी होगी।
use
- यह हमें पूर्ण नाम लिखने के बजाय
ControllerBaseउपयोग करने देता है। इससे हमारीclassलाइन पढ़ने में बहुत आसान हो जाती है।
myPage()
- YAML फ़ाइल में निर्दिष्ट मेथड public होना चाहिए। इसे renderable array लौटाना चाहिए।