مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

بررسی کنترلر Controller ها در فریمورک Yii


Controller ها، مسئول پردازش درخواست ها (request) و تولید پاسخ ها (response) هستند. پس از درخواست کاربر، Controller ها درخواست را تجزیه و تحلیل می کنند و بعد آنها را به Model ها، منتقل می نمایند. سپس نتیجه Model را به یک View می دهند و یک پاسخ قابل نمایش برای کاربر ارائه می دهند.

درک Action ها

Controller ها، شامل یکسری action ها می باشند. آنها واحد های اساسی در فریمورک ها هستند، که کاربر، می تواند به وسیله ی آنها، درخواست ها یا request ها را اجرا کند. یک Controller می تواند یک یا چند action داشته باشد.

اجازه دهید نگاهی به کنترلر SiteController در قالب اصلی برنامه (basic application template) بیاندازیم -

<?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 built-in server قالب اصلی برنامه را اجرا کنید و در مرورگر خود به آدرس http://localhost:8080/index.php?r=site/contact بروید. حال شما صفحه زیر را مشاهده خواهید نمود.

هنگامی که شما این صفحه را باز می کنید، اکشن Contact که در کنترلر SiteController است، اجرا می شود و با اجرا شدن این اکشن، ابتدا مدل ContactForm بارگذاری می شود. سپس ویو Contact را نمایش (render) می دهد و داده های خروجی از Model را به آن منتقل می کند.

اگر فرم را پر کنید و روی دکمه ارسال کلیک کنید، نتیجه ی زیر را مشاهده خواهید کرد -

توجه داشته باشید که این بار کد زیر اجرا می شود -

if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app>params ['adminEmail'])) { 
   Yii::$app->session->setFlash('contactFormSubmitted'); 
   return $this->refresh(); 
} 

اگر یک درخواست POST وجود داشته باشد، داده های POST را به Model ارجاع می دهیم و سعی می کنیم تا ایمیل را ارسال کنیم. اگر ایمیل با موفقیت ارسال شد، یک پیغام یا flash message با متن "از شما برای تماس با ما، تشکر می کنیم. ما در اسرع وقت به شما پاسخ خواهیم داد. " تنظیم می کنیم و صفحه را refresh می کنیم.

درک مسیرها یا Route ها

در URL مثال فوق، http://localhost:8080/index.php?r=site/contact مسیر یا route عبارت است از site/contact. که این مسیر، باعث اجرا شدن اکشن contact (actionContact) در کنترلر SiteController خواهد شد.

مسیر یا route شامل بخش های زیر است:

  • moduleID - اگر controller متعلق به یک ماژول باشد، این قسمت از مسیر یا route وجود خواهد داشت.
  • controllerID (site در مثال بالا) - یک رشته منحصر به فرد که یک controller را در بین تمام controller های یک ماژول یا برنامه، قابل شناسایی می کند.
  • actionID (contact در مثال بالا) - یک رشته منحصر بفردی که یک action را در میان تمام action های یک controller ، قابل شناسایی می کند.

فرمت مسیر یا route بصورت controllerID/actionID است. اگر controller متعلق به یک ماژول باشد، بنابراین آن، دارای فرمت زیر خواهد بود : moduleID/controllerID/actionID.

فصلِ: 14 , تعداد قسمت ها: 188 , سطح: صفر تا صد

این فصل در یک نگاه:

سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…
فصلِ: 8 , تعداد قسمت ها: 77 , سطح: صفر تا صد

این فصل در یک نگاه:

  پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید