PHP MVC फ्रेमवर्क ट्यूटोरियल
⚡ स्मार्ट सारांश
PHP MVC फ्रेमवर्क का डिज़ाइन, मॉडल, व्यू और कंट्रोलर का उपयोग करके एप्लिकेशन डेटा और व्यावसायिक तर्क को प्रस्तुति से अलग करता है। Codeइग्नाइटर इस पैटर्न को व्यावहारिक बनाता है, जिससे PHP डेवलपर्स सुरक्षित और रखरखाव योग्य वेब एप्लिकेशन को तेजी से बना सकते हैं।
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 फ्रेमवर्क और प्रत्येक फ्रेमवर्क द्वारा प्रदान की जाने वाली सुविधाओं का संक्षिप्त विवरण दिया गया है।
| ढांचा | विवरण |
|---|---|
|
|
यह सबसे लोकप्रिय PHP MVC फ्रेमवर्क में से एक है, जो अब अपने चौथे प्रमुख संस्करण में है (CodeIgniter 4) एक हल्का सॉफ्टवेयर है और इसे सीखना बहुत आसान है। इसमें कई सारी लाइब्रेरी हैं जो वेबसाइट और एप्लिकेशन को तेजी से बनाने में मदद करती हैं। OOP प्रोग्रामिंग की सीमित जानकारी रखने वाले उपयोगकर्ता भी इसका उपयोग कर सकते हैं। Codeइग्नाइटर में शामिल हैं;
|
|
यह एक पदानुक्रमित मॉडल व्यू कंट्रोलर (HMVC) सुरक्षित और हल्का फ्रेमवर्क है। नोट: कोहाना को आधिकारिक तौर पर 2017 में बंद कर दिया गया था; इसका अंतिम स्थिर संस्करण 3.3.6 (जुलाई 2016) था। इसके सामुदायिक संस्करण कोसेवन ने इसके कोडबेस को जारी रखा। कोहाना का उपयोग करने वाली कंपनियों में शामिल हैं: |
|
यह रूबी ऑन रेल्स के मॉडल पर आधारित है और इसका निरंतर रखरखाव किया जा रहा है (संस्करण 5.x)। यह सॉफ्टवेयर डिजाइन पैटर्न, कॉन्फ़िगरेशन के बजाय कन्वेंशन, एक्टिव रिकॉर्ड आदि जैसी अवधारणाओं के लिए जाना जाता है। CakePHP संचालित अनुप्रयोगों में शामिल हैं; |
|
|
यह एक शक्तिशाली ढांचा है;
यह विकास के लिए आदर्श है।ping व्यावसायिक अनुप्रयोग। 2020 में, ज़ेंड फ्रेमवर्क ओपन सोर्स लैमिनास प्रोजेक्ट में परिवर्तित हो गया। ज़ेंड/लैमिनास द्वारा संचालित अनुप्रयोगों में शामिल हैं:
ज़ेंड फ्रेमवर्क का उपयोग करने वाली कंपनियों में निम्नलिखित शामिल हैं:
|
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/
RSI Codeऊपर दिया गया इग्नाइटर वेलकम पेज इस बात की पुष्टि करता है कि फ्रेमवर्क सही ढंग से इंस्टॉल हो गया है। अब हम अपने जनमत सर्वेक्षण एप्लिकेशन को पोर्ट करने जा रहे हैं। Codeइग्निटर। याद रहे कि हमारा एप्लिकेशन तीन प्रमुख घटकों में विभाजित था, अर्थात्;
- फ्रंट कंट्रोलर – यही वह हिस्सा है जो प्रतिक्रिया देता है URL यह अनुरोध करता है और अनुरोधित पृष्ठ लौटाता है। यह कोड कंट्रोलर में जाएगा।
- मॉडल – यह वह कोड है जो डेटा अनुरोधों का जवाब देता है और अनुरोधित डेटा लौटाता है। यह कोड मॉडल में जाएगा।
- दृश्य - यह वह कोड है जो डेटा को फ़ॉर्मेट करने और प्रदर्शित करने के लिए ज़िम्मेदार है। यह कोड दृश्य में जाएगा
डेटाबेस कॉन्फ़िगरेशन सेटिंग्स
डेटाबेस कनेक्शन को कॉन्फ़िगर करने के लिए:
- ciopinionpoll फ़ोल्डर पर जाएँ
- ओपन डेटाबेस.php यह फ़ाइल application/config डायरेक्टरी में स्थित है।
- कोड की निम्नलिखित पंक्तियों का पता लगाएँ
- उपयोगकर्ता नाम को रूट पर सेट करें
- पासवर्ड को अपने लोकलहोस्ट रूट पासवर्ड पर सेट करें।
- डेटाबेस का नाम 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/
ऊपर दिया गया मतदान पृष्ठ हमारे opinion_poll_form व्यू से लिया गया है। कोई विकल्प चुने बिना OK पर क्लिक करें, और आपको निम्नलिखित चेतावनी संदेश दिखाई देगा।
अपनी पसंदीदा लाइब्रेरी के लिए वोट करें, फिर ओके पर क्लिक करें। आपको निम्नलिखित परिणाम पृष्ठ दिखाई देगा।
इससे यह पुष्टि होती है कि तीनों परतें एक साथ काम करती हैं: नियंत्रक ने वोट प्राप्त किया, मॉडल ने इसे संग्रहीत और गिना, और दृश्य ने कुल योग प्रदर्शित किया।









