Yii - नियंत्रकों
नियंत्रक अनुरोधों को संसाधित करने और प्रतिक्रियाएं उत्पन्न करने के लिए जिम्मेदार हैं। उपयोगकर्ता के अनुरोध के बाद, नियंत्रक अनुरोध डेटा का विश्लेषण करेगा, उन्हें मॉडल में पास करेगा, फिर मॉडल परिणाम को एक दृश्य में सम्मिलित करेगा, और एक प्रतिक्रिया उत्पन्न करेगा।
क्रियाओं को समझना
नियंत्रकों में क्रियाएं शामिल हैं। वे बुनियादी इकाइयां हैं जो उपयोगकर्ता निष्पादन के लिए अनुरोध कर सकते हैं। एक नियंत्रक में एक या कई क्रियाएं हो सकती हैं।
हम पर एक नजर है SiteController मूल आवेदन टेम्पलेट का -
<?php
namespace app\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\LoginForm;
use app\models\ContactForm;
class SiteController extends Controller {
public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['logout'],
'rules' => [
[
'actions' => ['logout'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
public function actions() {
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
];
}
public function actionIndex() {
return $this->render('index'); } public function actionLogin() { if (!\Yii::$app->user->isGuest) {
return $this->goHome(); } $model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) { return $this->goBack();
}
return $this->render('login', [ 'model' => $model,
]);
}
public function actionLogout() {
Yii::$app->user->logout(); return $this->goHome();
}
public function actionContact() {
//load ContactForm model
$model = new ContactForm(); //if there was a POST request, then try to load POST data into a model if ($model->load(Yii::$app->request->post()) && $model>contact(Yii::$app->params ['adminEmail'])) { Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh(); } return $this->render('contact', [
'model' => $model, ]); } public function actionAbout() { return $this->render('about');
}
public function actionSpeak($message = "default message") { return $this->render("speak",['message' => $message]);
}
}
?>
PHP अंतर्निहित सर्वर का उपयोग करके मूल एप्लिकेशन टेम्पलेट चलाएं और वेब ब्राउज़र पर जाएं http://localhost:8080/index.php?r=site/contact। आप निम्न पेज देखेंगे -
जब आप इस पृष्ठ को खोलते हैं, की संपर्क क्रिया SiteControllerनिष्पादित किया जाता है। कोड पहले लोड करता हैContactFormनमूना। फिर यह संपर्क दृश्य प्रस्तुत करता है और इसमें मॉडल को पास करता है।
यदि आप फॉर्म भरते हैं और सबमिट बटन पर क्लिक करते हैं, तो आपको निम्नलिखित दिखाई देंगे -
ध्यान दें कि इस बार निम्नलिखित कोड निष्पादित किया गया है -
if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app>params ['adminEmail'])) { Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh();
}
यदि कोई POST अनुरोध होता है, तो हम मॉडल को POST डेटा असाइन करते हैं और ईमेल भेजने का प्रयास करते हैं। अगर हम सफल होते हैं तो हम टेक्स्ट के साथ एक फ्लैश मैसेज सेट करते हैं “हमसे संपर्क करने के लिए धन्यवाद। हम आपको यथाशीघ्र जवाब देंगे।" और पेज को रिफ्रेश करें।
मार्गों को समझना
उपरोक्त उदाहरण में, URL में, http://localhost:8080/index.php?r=site/contact, मार्ग है site/contact। संपर्क क्रिया (actionContact) में SiteController निष्पादित किया जाएगा।
एक मार्ग में निम्नलिखित भाग होते हैं
moduleID - यदि नियंत्रक एक मॉड्यूल से संबंधित है, तो मार्ग का यह हिस्सा मौजूद है।
controllerID (उपरोक्त उदाहरण में साइट) - एक अद्वितीय स्ट्रिंग जो एक ही मॉड्यूल या एप्लिकेशन के भीतर सभी नियंत्रकों के बीच नियंत्रक की पहचान करता है।
actionID (उपरोक्त उदाहरण में संपर्क) - एक अद्वितीय स्ट्रिंग जो एक ही नियंत्रक के भीतर सभी क्रियाओं के बीच की क्रिया को पहचानती है।
मार्ग का प्रारूप है controllerID/actionID। यदि नियंत्रक एक मॉड्यूल से संबंधित है, तो इसका निम्न प्रारूप है:moduleID/controllerID/actionID।