"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > PHP डिज़ाइन पैटर्न: पेज नियंत्रक

PHP डिज़ाइन पैटर्न: पेज नियंत्रक

2024-12-22 को प्रकाशित
ब्राउज़ करें:295

PHP Design Patterns: Page Controller

पेज कंट्रोलर डिज़ाइन पैटर्न वेब-आधारित सिस्टम में उपयोग किया जाने वाला एक सामान्य वास्तुशिल्प दृष्टिकोण है। यह किसी व्यक्तिगत पृष्ठ या अनुरोध के तर्क को संभालने के लिए एक विशिष्ट नियंत्रक को समर्पित करके नियंत्रण के प्रवाह को व्यवस्थित करता है। यह दृष्टिकोण जिम्मेदारियों को अलग करने में मदद करता है, जिससे कोडबेस को बनाए रखना और विकसित करना आसान हो जाता है।

पेज नियंत्रक क्या है?

पेज कंट्रोलर पैटर्न में, प्रत्येक पेज (या समान व्यवहार वाले पेजों के समूह) का अपना नियंत्रक होता है, जो इसके लिए जिम्मेदार होता है:

  1. अनुरोध को संभालना: क्लाइंट से भेजे गए डेटा को संसाधित करना।
  2. पेज-विशिष्ट तर्क निष्पादित करना: इनपुट को मान्य करना, मॉडलों के साथ इंटरैक्ट करना, या गणना करना।
  3. एक प्रतिक्रिया प्रस्तुत करना: संसाधित डेटा को एक दृश्य (टेम्पलेट) में पास करना और ग्राहक को अंतिम प्रतिक्रिया लौटाना।

पैटर्न के लाभ

  1. सरल प्रवाह: प्रत्येक पृष्ठ को उसके अपने समर्पित नियंत्रक से मैप किया जाता है।
  2. चिंताओं का पृथक्करण: प्रत्येक नियंत्रक केवल अपने स्वयं के तर्क को संभालता है।
  3. रखरखाव: एक पृष्ठ में परिवर्तन केवल उसके संबंधित नियंत्रक को प्रभावित करते हैं।
  4. स्केलेबिलिटी: नए पेज जोड़ना सीधा है और मौजूदा कार्यक्षमता को बाधित नहीं करता है।

बुनियादी संरचना

एक विशिष्ट कार्यान्वयन में निम्नलिखित घटक शामिल होते हैं:

  • नियंत्रक: विशिष्ट पृष्ठों के लिए तर्क युक्त PHP फ़ाइलें।
  • रूट्स: नियंत्रकों को यूआरएल मैप करने के लिए एक रूटिंग तंत्र।
  • दृश्य: उपयोगकर्ता इंटरफ़ेस प्रस्तुत करने के लिए उपयोग किए जाने वाले टेम्पलेट।

प्रवाह

  1. क्लाइंट एक विशिष्ट यूआरएल पर अनुरोध भेजता है।
  2. रूटिंग सिस्टम अनुरोध के लिए उपयुक्त नियंत्रक की पहचान करता है।
  3. नियंत्रक आवश्यक तर्क निष्पादित करता है और प्रतिक्रिया प्रतिपादन को एक दृश्य में सौंपता है।
  4. दृश्य अंतिम आउटपुट उत्पन्न करता है और इसे क्लाइंट को लौटाता है।

कार्यान्वयन उदाहरण

फ़ाइल संरचना

/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.";
}

पक्ष - विपक्ष

फायदे

  • संगठन: नियंत्रक मॉड्यूलर होते हैं, प्रत्येक एक विशिष्ट पृष्ठ को संभालते हैं।
  • पुन: प्रयोज्यता: विभिन्न नियंत्रकों में दृश्यों का पुन: उपयोग किया जा सकता है।
  • डिबगिंग: त्रुटियों का पता लगाना आसान है क्योंकि प्रत्येक पृष्ठ का अपना समर्पित नियंत्रक होता है।

नुकसान

  • नियंत्रकों की संख्या में वृद्धि: बड़ी परियोजनाओं से नियंत्रकों का प्रसार हो सकता है, जिसके लिए बेहतर संगठन की आवश्यकता होती है।
  • कोड दोहराव: नियंत्रकों में सामान्य तर्क दोहराया जा सकता है। इसे आधार नियंत्रक वर्ग का उपयोग करके कम किया जा सकता है।

पेज नियंत्रक पैटर्न का उपयोग कब करें?

  • सरल सिस्टम: छोटे से मध्यम आकार के वेब अनुप्रयोगों के लिए सर्वोत्तम जहां प्रत्येक पृष्ठ में विशिष्ट तर्क होते हैं।
  • मॉड्यूलर परियोजनाएं: जब आप आसान रखरखाव के लिए तर्क को अलग करना चाहते हैं।
  • बिना फ्रेमवर्क के: मजबूत फ्रेमवर्क (जैसे लारवेल या सिम्फनी) के बिना PHP परियोजनाओं के लिए आदर्श।

अधिक जटिल परियोजनाओं के लिए, जहां महत्वपूर्ण तर्क पुन: उपयोग या एकाधिक प्रवेश बिंदु हैं, फ्रंट कंट्रोलर या पूर्ण एमवीसी आर्किटेक्चर जैसे पैटर्न अधिक उपयुक्त हो सकते हैं।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/xxzeroxx/php-design-patterns-page-controller-34f2?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3