Yii - Pengendali

Pengontrol bertanggung jawab untuk memproses permintaan dan menghasilkan tanggapan. Setelah permintaan pengguna, pengontrol akan menganalisis data permintaan, meneruskannya ke model, lalu memasukkan hasil model ke dalam tampilan, dan menghasilkan respons.

Memahami Tindakan

Pengontrol termasuk tindakan. Mereka adalah unit dasar yang dapat diminta oleh pengguna untuk dieksekusi. Pengontrol dapat memiliki satu atau beberapa tindakan.

Mari kita lihat SiteController dari template aplikasi dasar -

<?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]); 
      } 
   } 
?>

Jalankan template aplikasi dasar menggunakan server bawaan PHP dan buka browser web di http://localhost:8080/index.php?r=site/contact. Anda akan melihat halaman berikut -

Saat Anda membuka halaman ini, tindakan kontak dari SiteControllerdieksekusi. Kode pertama memuatContactFormmodel. Kemudian itu membuat tampilan kontak dan meneruskan model ke dalamnya.

Jika Anda mengisi formulir dan mengklik tombol kirim, Anda akan melihat yang berikut -

Perhatikan bahwa kali ini kode berikut dijalankan -

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

Jika ada permintaan POST, kami menetapkan data POST ke model dan mencoba mengirim email. Jika kami berhasil maka kami memasang pesan kilat dengan teks “Terima kasih telah menghubungi kami. Kami akan menanggapi Anda secepat mungkin. ” dan segarkan halaman.

Memahami Rute

Dalam contoh di atas, di URL, http://localhost:8080/index.php?r=site/contact, rutenya adalah site/contact. The contact action (actionContact) in the SiteController will be executed.

A route consists of the following parts−

  • moduleID − If the controller belongs to a module, then this part of the route exists.

  • controllerID (site in the above example) − A unique string that identifies the controller among all controllers within the same module or application.

  • actionID (contact in the above example) − A unique string that identifies the action among all actions within the same controller.

The format of the route is controllerID/actionID. If the controller belongs to a module, then it has the following format: moduleID/controllerID/actionID.