PHP में अपने स्वयं के MVC फ्रेमवर्क में नियंत्रक
जैसा कि आप पहले से ही जानते हैं, हमारे फ्रेमवर्क के सभी नियंत्रकों में render विधि होती है, जिसे दृश्य में डेटा भेजने के लिए कॉल करने की आवश्यकता होती है। यह विधि हमारे, उपयोगकर्ता नियंत्रक, मूल वर्ग Controller से विरासत में मिलती है, जो कोर में स्थित है। आइए इस वर्ग को बनाएं:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
जैसा कि आप देखते हैं, render विधि पैरामीटर के रूप में दृश्य का नाम और प्रदर्शन के लिए डेटा लेती है। मान लीजिए कि यह विधि एक विशेष वर्ग Page की वस्तु लौटाती है, जिसमें नियंत्रक क्रिया के डेटा के दृश्य के बारे में जानकारी होगी। इस वर्ग में दृश्य का नाम, डेटा, साथ ही पृष्ठ का शीर्षक और साइट के खाके वाली फ़ाइल का नाम शामिल होगा:
<?php
namespace Core;
class Page
{
private $layout;
private $title;
private $view;
private $data;
public function __construct($layout, $title, $view, $data)
{
$this->layout = $layout;
$this->title = $title;
$this->view = $view;
$this->data = $data;
}
public function __get($property)
{
return $this->$property;
}
}
?>
तब हमारी render विधि का कोड इस तरह दिखेगा:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
मैं समझाता हूं कि यहां क्या हो रहा है। दृश्य का नाम और डेटा विधि के पैरामीटर के रूप में आते हैं। हालाँकि, उपयोगकर्ता नियंत्रक में पृष्ठ का शीर्षक भी निर्धारित किया जाता है - title गुण को लिखकर। इसका मतलब है कि $this->title में वह शीर्षक शामिल होगा जिसे हम Page वर्ग के कंस्ट्रक्टर को पास करेंगे।
खाके के साथ भी बारीकियां हैं। जैसा कि आप जानते हैं, हमारा फ्रेमवर्क default.php फ़ाइल से खाका का उपयोग करता है। वास्तव में, प्रत्येक क्रिया का एक अलग खाका भी हो सकता है। ऐसा करने के लिए, क्रिया में ही layout गुण में एक अलग खाका नाम लिखना होगा।
यह कैसे हासिल किया जाता है: हमारे मूल नियंत्रक में layout गुण होता है, जिसका डिफ़ॉल्ट मान 'default.php' होता है। यह डिफ़ॉल्ट रूप से खाका होगा। हालाँकि, यदि उपयोगकर्ता नियंत्रक की क्रिया layout गुण के मान को फिर से परिभाषित करती है, तो खाका भी अलग होगा।
मेरे Controller वर्ग की कोड की प्रतिलिपि बनाएँ और इसे /core/Controller.php फ़ाइल में रखें।
मेरे Page वर्ग की कोड की प्रतिलिपि बनाएँ और इसे /core/Page.php फ़ाइल में रखें।