Yii - Bộ điều khiển

Bộ điều khiển có trách nhiệm xử lý các yêu cầu và tạo phản hồi. Sau yêu cầu của người dùng, bộ điều khiển sẽ phân tích dữ liệu yêu cầu, chuyển chúng vào mô hình, sau đó chèn kết quả mô hình vào dạng xem và tạo phản hồi.

Hiểu các hành động

Bộ điều khiển bao gồm các hành động. Chúng là các đơn vị cơ bản mà người dùng có thể yêu cầu để thực thi. Một bộ điều khiển có thể có một hoặc một số hành động.

Hãy để chúng tôi xem xét SiteController của mẫu ứng dụng cơ bản -

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

Chạy mẫu ứng dụng cơ bản bằng máy chủ tích hợp PHP và truy cập trình duyệt web tại http://localhost:8080/index.php?r=site/contact. Bạn sẽ thấy trang sau -

Khi bạn mở trang này, hành động liên hệ của SiteControllerđược thực thi. Đầu tiên mã tảiContactFormmô hình. Sau đó, nó hiển thị dạng xem liên hệ và chuyển mô hình vào đó.

Nếu bạn điền vào biểu mẫu và nhấp vào nút gửi, bạn sẽ thấy như sau:

Lưu ý rằng lần này đoạn mã sau được thực thi:

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

Nếu có yêu cầu ĐĂNG, chúng tôi chỉ định dữ liệu ĐĂNG cho mô hình và cố gắng gửi email. Nếu chúng tôi thành công thì chúng tôi sẽ cài đặt một thông điệp flash với nội dung “Cảm ơn bạn đã liên hệ với chúng tôi. Chung tôi se trả lơi sơm nhât co thể." và làm mới trang.

Hiểu các tuyến đường

Trong ví dụ trên, trong URL, http://localhost:8080/index.php?r=site/contact, tuyến đường là site/contact. Hành động liên hệ (actionContact) bên trong SiteController sẽ được thực thi.

Một tuyến đường bao gồm các phần sau:

  • moduleID - Nếu bộ điều khiển thuộc về một mô-đun, thì phần này của tuyến đường tồn tại.

  • controllerID (trang web trong ví dụ trên) - Một chuỗi duy nhất xác định bộ điều khiển trong số tất cả các bộ điều khiển trong cùng một mô-đun hoặc ứng dụng.

  • actionID (liên hệ trong ví dụ trên) - Một chuỗi duy nhất xác định hành động trong số tất cả các hành động trong cùng một bộ điều khiển.

Định dạng của tuyến đường là controllerID/actionID. Nếu bộ điều khiển thuộc về một mô-đun, thì nó có định dạng sau:moduleID/controllerID/actionID.