पेज कंट्रोलर डिज़ाइन पैटर्न वेब-आधारित सिस्टम में उपयोग किया जाने वाला एक सामान्य वास्तुशिल्प दृष्टिकोण है। यह किसी व्यक्तिगत पृष्ठ या अनुरोध के तर्क को संभालने के लिए एक विशिष्ट नियंत्रक को समर्पित करके नियंत्रण के प्रवाह को व्यवस्थित करता है। यह दृष्टिकोण जिम्मेदारियों को अलग करने में मदद करता है, जिससे कोडबेस को बनाए रखना और विकसित करना आसान हो जाता है।
पेज कंट्रोलर पैटर्न में, प्रत्येक पेज (या समान व्यवहार वाले पेजों के समूह) का अपना नियंत्रक होता है, जो इसके लिए जिम्मेदार होता है:
एक विशिष्ट कार्यान्वयन में निम्नलिखित घटक शामिल होते हैं:
प्रवाह
फ़ाइल संरचना
/htdocs /src /Controllers HomeController.php AboutController.php /Services ViewRenderer.php /Views home.html.php about.html.php /public index.php /routes.php composer.json
ऑटोलोडर
{ "autoload": { "psr-4": { "App\\": "htdocs/" } } }
composer dump-autoload
टेम्पलेट
होमपेज और about.html.php के लिए टेम्पलेट।
= htmlspecialchars($title) ?> = htmlspecialchars($title) ?>
= htmlspecialchars($content) ?>
व्यूरेंडरर
namespace App\Services; class ViewRenderer { public function render(string $view, array $data = []): void { extract($data); // Turns array keys into variables include __DIR__ . "/../../Views/{$view}.html.php"; } }
होमकंट्रोलर
मुखपृष्ठ तर्क को संभालता है।
namespace App\Controllers; use App\Services\ViewRenderer; class HomeController { public function __construct(private ViewRenderer $viewRenderer) { } public function handleRequest(): void { $data = [ 'title' => 'Welcome to the Site', 'content' => 'Homepage content.', ]; $this->viewRenderer->render('home', $data); } }
नियंत्रक के बारे में
"हमारे बारे में" पृष्ठ तर्क को संभालता है।
namespace App\Controllers; use App\Services\ViewRenderer; class AboutController { public function __construct(private ViewRenderer $viewRenderer) { } public function handleRequest(): void { $data = [ 'title' => 'About Us', 'content' => 'Information about the company.', ]; $this->viewRenderer->render('about', $data); } }
routes.php
नियंत्रकों के लिए रूट मैपिंग को परिभाषित करता है।
use App\Controllers\HomeController; use App\Controllers\AboutController; // Define the routes in an associative array return [ '/' => HomeController::class, '/about' => AboutController::class, ];
index.php
एप्लिकेशन का प्रवेश बिंदु।
require_once __DIR__ . '/../vendor/autoload.php'; use App\Services\ViewRenderer; // Include the routes $routes = require_once __DIR__ . '/../routes.php'; // Instantiate the view rendering service $viewRenderer = new ViewRenderer(); // Get the current route from the request URI $requestUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); // Check if the route exists and resolve the controller if (isset($routes[$requestUri])) { $controllerClass = $routes[$requestUri]; $controller = new $controllerClass($viewRenderer); $controller->handleRequest(); } else { http_response_code(404); echo "Page not found."; }
फायदे
नुकसान
अधिक जटिल परियोजनाओं के लिए, जहां महत्वपूर्ण तर्क पुन: उपयोग या एकाधिक प्रवेश बिंदु हैं, फ्रंट कंट्रोलर या पूर्ण एमवीसी आर्किटेक्चर जैसे पैटर्न अधिक उपयुक्त हो सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3