PHP MVC फ्रेमवर्क ट्यूटोरियल

⚡ स्मार्ट सारांश

PHP MVC फ्रेमवर्क का डिज़ाइन, मॉडल, व्यू और कंट्रोलर का उपयोग करके एप्लिकेशन डेटा और व्यावसायिक तर्क को प्रस्तुति से अलग करता है। Codeइग्नाइटर इस पैटर्न को व्यावहारिक बनाता है, जिससे PHP डेवलपर्स सुरक्षित और रखरखाव योग्य वेब एप्लिकेशन को तेजी से बना सकते हैं।

  • 🧩 पैटर्न: MVC कोड को साफ-सुथरा बनाने के लिए एप्लिकेशन को मॉडल (डेटा), व्यू (प्रस्तुति) और कंट्रोलर (अनुरोध प्रबंधन) में विभाजित करता है।
  • 🚀 उत्पादकता: फ्रेमवर्क डेटाबेस एक्सेस, वैलिडेशन और इनपुट सैनिटाइजेशन के लिए पहले से निर्मित लाइब्रेरी प्रदान करते हैं, जिससे टीमें तेजी से फीचर्स डिलीवर कर पाती हैं।
  • विकल्प: CodeIgniter, CakePHP और Laminas (पूर्व में Zend) अभी भी सक्रिय विकल्प हैं, जबकि Kohana को 2017 में बंद कर दिया गया था।
  • आदर्श: In CodeIgniter में, मॉडल CI_Model का विस्तार करते हैं और सुरक्षित डेटाबेस संचालन के लिए क्वेरी बिल्डर विधियों का उपयोग करते हैं।
  • 🎮 नियंत्रक: कंट्रोलर CI_Controller को एक्सटेंड करते हैं, इनपुट क्लास के माध्यम से यूजर इनपुट पढ़ते हैं और सही व्यू लोड करते हैं।
  • 📈 प्रभाव: एक साधारण PHP पोल एप्लिकेशन को पोर्ट करने से पता चलता है कि MVC संरचना किस प्रकार दोहराव को कम करती है और दीर्घकालिक रखरखाव को सरल बनाती है।

PHP MVC फ्रेमवर्क

PHP MVC फ्रेमवर्क क्या है?

PHP MVC एक एप्लीकेशन डिज़ाइन पैटर्न है जो एप्लीकेशन डेटा और बिजनेस लॉजिक (मॉडल) को प्रेजेंटेशन (व्यू) से अलग करता है। MVC का मतलब है मॉडल, व्यू और कंट्रोलर।

नियंत्रक मॉडल और दृश्यों के बीच मध्यस्थता करता है।

एमवीसी डिज़ाइन पैटर्न को एक कार और ड्राइवर के रूप में सोचें।

कार में विंडस्क्रीन (दृश्य) होती है जिसका उपयोग चालक (नियंत्रक) आगे के यातायात की निगरानी करने के लिए करता है, फिर आगे जो कुछ भी देखता है उसके आधार पर गति बढ़ाता है या ब्रेक लगाता है (मॉडल)।

अब आइए देखते हैं कि इस पैटर्न पर आधारित फ्रेमवर्क का उपयोग करना क्यों फायदेमंद है।

PHP MVC फ्रेमवर्क का उपयोग क्यों करें?

PHP MVC फ्रेमवर्क जटिल तकनीकों के साथ काम करना आसान बनाते हैं:

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

PHP MVC डिज़ाइन पैटर्न

आइए अब MVC डिज़ाइन पैटर्न के प्रत्येक घटक पर संक्षेप में चर्चा करें।

आदर्श - यह भाग व्यवसाय तर्क और एप्लिकेशन डेटा से संबंधित है। इसका उपयोग डेटा सत्यापन करने, डेटा को संसाधित करने और उसे संग्रहीत करने के लिए किया जा सकता है। डेटा यहाँ से आ सकता है;

  • सरल फ़ाइल
  • डेटाबेस
  • एक्सएमएल दस्तावेज़
  • अन्य वैध डेटा स्रोत.

नियंत्रक – यह वह हिस्सा है जो सर्वर से संसाधनों के लिए उपयोगकर्ता के अनुरोधों से संबंधित है।

उदाहरण के तौर पर, जब उपयोगकर्ता अनुरोध करता है URL …/index.php?products=सूचीकंट्रोलर, उत्पादों का डेटा प्राप्त करने के लिए प्रोडक्ट्स मॉडल को लोड करेगा, फिर परिणामों को लिस्ट व्यू में प्रदर्शित करेगा।

संक्षेप में, नियंत्रक अनुरोधित संसाधनों के आधार पर मॉडल और दृश्यों को एक साथ जोड़ता है।

दृश्य – इस भाग में उपयोगकर्ता को डेटा प्रस्तुत करने का कार्य शामिल है। यह आमतौर पर HTML पृष्ठों के रूप में होता है।

PHP MVC फ्रेमवर्क के प्रकार

सर्वोत्तम PHP फ्रेमवर्क का चयन करना एक चुनौती है।

MVC के लाभों से लाभ उठाने के लिए आपको अपना स्वयं का फ्रेमवर्क लिखने की आवश्यकता नहीं है।

आपको यह समझने के लिए कि MVC फ्रेमवर्क कैसे काम करता है, केवल अपना स्वयं का MVC-संबंधित अनुप्रयोग डिज़ाइन बनाने का प्रयास करना चाहिए।

एक बार जब आप MVC फ्रेमवर्क के काम करने के तरीके से सहज हो जाएं, तो आपको परिपक्व और पहले से परीक्षण किए गए फ्रेमवर्क की ओर बढ़ना चाहिए।

नीचे दी गई तालिका में कुछ लोकप्रिय PHP फ्रेमवर्क और प्रत्येक फ्रेमवर्क द्वारा प्रदान की जाने वाली सुविधाओं का संक्षिप्त विवरण दिया गया है।

ढांचा विवरण

Codeआग लगनेवाला


Codeआग लगनेवाला


https://codeigniter.com/

यह सबसे लोकप्रिय PHP MVC फ्रेमवर्क में से एक है, जो अब अपने चौथे प्रमुख संस्करण में है (CodeIgniter 4) एक हल्का सॉफ्टवेयर है और इसे सीखना बहुत आसान है। इसमें कई सारी लाइब्रेरी हैं जो वेबसाइट और एप्लिकेशन को तेजी से बनाने में मदद करती हैं। OOP प्रोग्रामिंग की सीमित जानकारी रखने वाले उपयोगकर्ता भी इसका उपयोग कर सकते हैं। Codeइग्नाइटर में शामिल हैं;

  • https://www.pyrocms.com/ (प्रारंभिक संस्करण; PyroCMS बाद में Laravel पर स्थानांतरित हो गया)

कोहना


कोहना


http://kohanaframework.org

यह एक पदानुक्रमित मॉडल व्यू कंट्रोलर (HMVC) सुरक्षित और हल्का फ्रेमवर्क है। नोट: कोहाना को आधिकारिक तौर पर 2017 में बंद कर दिया गया था; इसका अंतिम स्थिर संस्करण 3.3.6 (जुलाई 2016) था। इसके सामुदायिक संस्करण कोसेवन ने इसके कोडबेस को जारी रखा। कोहाना का उपयोग करने वाली कंपनियों में शामिल हैं:


CakePHP


CakePHP


www.cakephp.org

यह रूबी ऑन रेल्स के मॉडल पर आधारित है और इसका निरंतर रखरखाव किया जा रहा है (संस्करण 5.x)। यह सॉफ्टवेयर डिजाइन पैटर्न, कॉन्फ़िगरेशन के बजाय कन्वेंशन, एक्टिव रिकॉर्ड आदि जैसी अवधारणाओं के लिए जाना जाता है। CakePHP संचालित अनुप्रयोगों में शामिल हैं;


Zend

https://getlaminas.org/


ज़ेंड (अब लैमिनास)

यह एक शक्तिशाली ढांचा है;

  • सुरक्षित, विश्वसनीय, तेज़ और स्केलेबल
  • वेब सेवाओं और एपीआई के निर्माण का समर्थन करता है।

यह विकास के लिए आदर्श है।ping व्यावसायिक अनुप्रयोग। 2020 में, ज़ेंड फ्रेमवर्क ओपन सोर्स लैमिनास प्रोजेक्ट में परिवर्तित हो गया। ज़ेंड/लैमिनास द्वारा संचालित अनुप्रयोगों में शामिल हैं:

  • पिमकोर सीएमएस,
  • डॉटकर्नेल.

ज़ेंड फ्रेमवर्क का उपयोग करने वाली कंपनियों में निम्नलिखित शामिल हैं:

  • बीबीसी
  • Cisco
  • वेबएक्स
  • ऑफ़र। Com

PHP MVC फ्रेमवर्क बनाम प्लेन PHP: मुख्य अंतर

व्यवहार में फ्रेमवर्क वास्तव में क्या बदलाव लाता है? साधारण PHP आपको पूरी स्वतंत्रता देता है, लेकिन हर प्रोजेक्ट में राउटिंग, वैलिडेशन और डेटाबेस एक्सेस को नए सिरे से तैयार करना पड़ता है। PHP MVC फ्रेमवर्क इन दोहराए जाने वाले कार्यों को मानकीकृत करता है, जिससे आपका कोड सभी प्रोजेक्ट और टीमों में एक जैसा बना रहता है।

पहलू साधारण PHP PHP MVC फ्रेमवर्क
Code संगठन एक ही फ़ाइल में मिश्रित HTML, SQL और लॉजिक मॉडल, व्यू और कंट्रोलर में विभाजित
डेटाबेस एक्सेस प्रत्येक पृष्ठ पर हाथ से लिखे प्रश्न पैरामीटर बाइंडिंग के साथ बिल्ट-इन क्वेरी बिल्डर या ORM
सुरक्षा डेवलपर को हर सुरक्षा उपाय का ध्यान रखना चाहिए इनपुट फ़िल्टरिंग, XSS और CSRF सुरक्षा शामिल है
रखरखाव फ़ाइलों में बदलाव अप्रत्याशित रूप से फैलते हैं। प्रत्येक परत स्वतंत्र रूप से बदल सकती है

💡 सुझाव: सबसे पहले एक छोटा सा साधारण PHP प्रोजेक्ट बनाएं, जैसा कि नीचे दिए गए जनमत सर्वेक्षण में दिखाया गया है; मिश्रित कोड की परेशानी से MVC पृथक्करण का महत्व स्पष्ट हो जाता है।

जनमत सर्वेक्षण एप्लिकेशन को पोर्ट करना Codeआग लगनेवाला

इस में ट्यूटोरियलहमने एक PHP पोल एप्लिकेशन बनाया था। यहाँ, हम उस कोड को पोर्ट करेंगे। Codeआग लगनेवाला

  • डाउनलोड का नवीनतम संस्करण Codeउनके इग्नाइटर से वेबसाइट।
  • Extracज़िप फ़ाइल की सामग्री को अपने वेब सर्वर डायरेक्टरी में स्थित डेवलपमेंट डायरेक्टरी में पेस्ट करें। इस पाठ में हम फ़ोल्डर का नाम ciopinionpoll रखेंगे।
  • के लिए ब्राउज़ करें URL http://localhost/ciopinionpoll/

Codeपूर्व के बाद इग्नाइटर का स्वागत पृष्ठ दिखाया गयाtracढाँचे को टिंग करना

RSI Codeऊपर दिया गया इग्नाइटर वेलकम पेज इस बात की पुष्टि करता है कि फ्रेमवर्क सही ढंग से इंस्टॉल हो गया है। अब हम अपने जनमत सर्वेक्षण एप्लिकेशन को पोर्ट करने जा रहे हैं। Codeइग्निटर। याद रहे कि हमारा एप्लिकेशन तीन प्रमुख घटकों में विभाजित था, अर्थात्;

  • फ्रंट कंट्रोलर – यही वह हिस्सा है जो प्रतिक्रिया देता है URL यह अनुरोध करता है और अनुरोधित पृष्ठ लौटाता है। यह कोड कंट्रोलर में जाएगा।
  • मॉडल – यह वह कोड है जो डेटा अनुरोधों का जवाब देता है और अनुरोधित डेटा लौटाता है। यह कोड मॉडल में जाएगा।
  • दृश्य - यह वह कोड है जो डेटा को फ़ॉर्मेट करने और प्रदर्शित करने के लिए ज़िम्मेदार है। यह कोड दृश्य में जाएगा

डेटाबेस कॉन्फ़िगरेशन सेटिंग्स

डेटाबेस कनेक्शन को कॉन्फ़िगर करने के लिए:

  • ciopinionpoll फ़ोल्डर पर जाएँ
  • ओपन डेटाबेस.php यह फ़ाइल application/config डायरेक्टरी में स्थित है।
  • कोड की निम्नलिखित पंक्तियों का पता लगाएँ

डेटाबेस कॉन्फ़िगरेशन सेटिंग्स में CodeIgniter database.php फ़ाइल

  • उपयोगकर्ता नाम को रूट पर सेट करें
  • पासवर्ड को अपने लोकलहोस्ट रूट पासवर्ड पर सेट करें।
  • डेटाबेस का नाम opinion_poll रखें। ध्यान दें कि हम पिछले पाठ में बनाए गए डेटाबेस का उपयोग करेंगे।
  • परिवर्तन सहेजें और फ़ाइल बंद करें।

अपना मॉडल बनाना

अब हम अपना मॉडल बनाने जा रहे हैं जो CI_Model का विस्तार करेगा। CI_Model इसका एक हिस्सा है। Codeइग्नाइटर लाइब्रेरी। मॉडल application/models फ़ोल्डर में स्थित होगा। opinion_poll_model.php

<?php
class Opinion_poll_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
        $this->load->database();
    }

    public function total_votes()
    {
        $query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
        return $query->row()->choices_count;
    }

    public function get_results()
    {
        $libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
        $table_rows = '';

        for ($i = 1; $i < 5; $i++)
        {
            $query = $this->db->select('COUNT(choice) as choices_count')
                              ->where('choice', $i)
                              ->get('js_libraries');

            $table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
        }

        return $table_rows;
    }

    public function add_vote($choice)
    {
        $ts = date("Y-m-d H:i:s");
        $data = array('choice' => $choice, 'ts' => $ts);
        $this->db->insert('js_libraries', $data);
    }
}
?>

यहाँ,

  • “class Opinion_poll_model extends CI_Model…” हमारा मॉडल है जो CI_Model को विस्तारित करता है
  • “parent::__construct();” CI_Model कंस्ट्रक्टर को कॉल करता है
  • “$this->load->database();” डेटाबेस लाइब्रेरी को लोड करता है ताकि हमारा एप्लिकेशन डेटाबेस के साथ इंटरैक्ट कर सके
  • “$this->db->” है Codeइग्निटर का सक्रिय रिकॉर्ड। इसे देखें। संपर्क सक्रिय रिकॉर्ड पर अधिक जानकारी के लिए.

हमारे नियंत्रक का निर्माण

चलिए अब कंट्रोलर बनाते हैं। हम डिफ़ॉल्ट का उपयोग करेंगे। CodeIgniter कंट्रोलर application/controllers/welcome.php में स्थित है। इसके सोर्स कोड को निम्नलिखित कोड से बदलें।

<?php

if (!defined('BASEPATH'))  exit('No direct script access allowed');

class Welcome extends CI_Controller {

    public function __construct() {

        parent::__construct();

        $this->load->model('opinion_poll_model');

    }

    public function index() {

        if ($this->input->post('submitbutton') && !$this->input->post('vote')) {

            echo "<script>alert('You did not vote!');</script>";

        }

        if ($this->input->post('vote')) {

            $this->opinion_poll_model->add_vote($this->input->post('vote'));

            $data['total_votes'] = $this->opinion_poll_model->total_votes();

            $data['rows'] = $this->opinion_poll_model->get_results();

            $this->load->view('results', $data);

        } else {

            $this->load->view('opinion_poll_form');

        }

    }

}

/* End of file welcome.php */

/* Location: ./application/controllers/welcome.php */
?>

यहाँ,

  • “if (!defined('BASEPATH')) exit('No direct script access permitted');” यह सुनिश्चित करता है कि उपयोगकर्ता सीधे नियंत्रक वर्ग तक नहीं पहुँच पाते हैं
  • “क्लास वेलकम CI_Controller को बढ़ाता है…” हमारा नियंत्रक CI_Controller क्लास को बढ़ाता है
  • “public function __construct()” CI_Controller के क्लास कंस्ट्रक्टर मेथड को कॉल करता है और हमारे Opinion_poll_model मॉडल को लोड करता है।
  • “public function index()…” वह फ़ंक्शन है जो index.php से मैप करता है। यह उपयोग करता है CodeIgniter की इनपुट क्लास यह जांचने के लिए उपयोग की जाती है कि कोई वोट सबमिट हुआ है या नहीं, उसे डेटाबेस में जोड़ा जाता है और फिर परिणाम प्रदर्शित किए जाते हैं। यदि इनपुट क्लास का पोस्ट ऐरे खाली है, तो यह वोटिंग पेज लोड करता है।
  • “$this->input->post('…')” है CodeIgniter इनपुट क्लास जो $_POST ग्लोबल वेरिएबल की सामग्री को प्राप्त करती है।
  • “$this->opinion_poll_model->add_vote($this->input->post('vote'))” डेटाबेस में वोट जोड़ने के लिए मॉडल की add_vote विधि को कॉल करता है।

हमारे विचार बनाना

पिछले उदाहरण से याद करें कि हमारे पास दो HTML पेज थे, एक वोटिंग के लिए और दूसरा परिणामों के लिए। हम अपने व्यू बनाने के लिए उसी HTML कोड का उपयोग करेंगे, जिसमें कुछ मामूली बदलाव होंगे। application/views डायरेक्टरी में निम्नलिखित फ़ाइलें बनाएँ।

opinion_poll_form.php
<html>
<head>
    <title>
        JavaScript Libraries - Opinion Poll
    </title>
</head>

<body>
    <h2>JavaScript Libraries - Opinion Poll</h2>
    <p><b>What is your favorite JavaScript Library?</b></p>
    <form method="POST" action="index.php">
        <p>
            <input type="radio" name="vote" value="1" /> JQuery
            <br />
            <input type="radio" name="vote" value="2" /> MooTools
            <br />
            <input type="radio" name="vote" value="3" /> YUI Library
            <br />
            <input type="radio" name="vote" value="4" /> Glow </p>
        <p>
            <input type="submit" name="submitbutton" value="OK" />
        </p>
    </form>
</body>
</html>

आइए अब परिणाम पृष्ठ results.php बनाएं

<html>
    <head>
        <title>JavaScript Libraries - Opinion Poll Results</title>
    </head>
    <body>

        <h2>JavaScript Libraries - Opinion Poll Results</h2>

        <p><b>What is your favorite JavaScript Library?</b></p>

        <p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>

        <p><table><tr><td>

            <?php print($rows); ?>

        </tr></td></table></p>

        <p><a href="#">Return to voting page</a></p>
</body>
</html>

हमारे एप्लिकेशन का परीक्षण

मान लीजिए कि आपके एप्लिकेशन की रूट डायरेक्टरी ciopinionpoll है, तो ब्राउज़ करें http://localhost/ciopinionpoll/

जनमत सर्वेक्षण मतदान प्रपत्र द्वारा प्रस्तुत किया गया Codeइग्नाइटर एप्लिकेशन

ऊपर दिया गया मतदान पृष्ठ हमारे opinion_poll_form व्यू से लिया गया है। कोई विकल्प चुने बिना OK पर क्लिक करें, और आपको निम्नलिखित चेतावनी संदेश दिखाई देगा।

जब कोई वोट नहीं चुना जाता है तो सत्यापन चेतावनी संदेश प्रदर्शित होता है

अपनी पसंदीदा लाइब्रेरी के लिए वोट करें, फिर ओके पर क्लिक करें। आपको निम्नलिखित परिणाम पृष्ठ दिखाई देगा।

जनमत सर्वेक्षण के परिणाम पृष्ठ पर प्रति व्यक्ति वोटों की संख्या दिखाई गई है। Javaस्क्रिप्ट लाइब्रेरी

इससे यह पुष्टि होती है कि तीनों परतें एक साथ काम करती हैं: नियंत्रक ने वोट प्राप्त किया, मॉडल ने इसे संग्रहीत और गिना, और दृश्य ने कुल योग प्रदर्शित किया।

अक्सर पूछे जाने वाले प्रश्न

HMVC (हाइरार्किकल मॉडल व्यू कंट्रोलर) एक एप्लिकेशन को स्वतंत्र MVC ट्रायड में व्यवस्थित करता है जो एक दूसरे को कॉल कर सकते हैं। जैसे फ्रेमवर्क कोहना HMVC को इसलिए लोकप्रिय बनाया गया क्योंकि यह बड़े अनुप्रयोगों को मॉड्यूलर बनाने में मदद करता है।

हां. Laravel यह वर्तमान में सबसे लोकप्रिय PHP MVC फ्रेमवर्क है। यह यहाँ वर्णित मॉडल-व्यू-कंट्रोलर पृथक्करण का अनुसरण करता है, साथ ही इसमें Eloquent ORM और Blade टेम्प्लेट जैसे टूल भी शामिल हैं।

हाँ. जैसे उपकरण गिटहब कोपिलॉट आप प्रॉम्प्ट से मॉडल, कंट्रोलर और व्यू बना सकते हैं। फिर भी, आपको जेनरेट किए गए कोड की सुरक्षा संबंधी समस्याओं, जैसे कि अनएस्केप्ड आउटपुट और SQL इंजेक्शन, के लिए समीक्षा करनी चाहिए।

नहीं। एआई सहायक कोड लिखने की प्रक्रिया को तेज़ करते हैं, लेकिन फ्रेमवर्क अभी भी परीक्षित संरचना, सुरक्षा संबंधी डिफ़ॉल्ट सेटिंग्स और नियम प्रदान करते हैं जो अनुप्रयोगों को रखरखाव योग्य बनाए रखते हैं। ये दोनों मिलकर सबसे अच्छा काम करते हैं।

नहीं. Codeआग लगनेवाला यह सीमित ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग अनुभव वाले डेवलपर्स के लिए अनुकूल है। क्लास, मेथड और बेसिक इनहेरिटेंस का ज्ञान इसके मॉडल और कंट्रोलर पैटर्न को समझने के लिए पर्याप्त है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: