Yii 控制器

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()) {            returnthis->goBack(); 
         } 
         return this->render('login', [            'model' =>model, 
         ]); 
      }
      public function actionLogout() { 
         Yii::app->user->logout();          returnthis->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();         }         returnthis->render('contact', [ 
            'model' => model,         ]);      }      public function actionAbout() {         returnthis->render('about'); 
      } 
      public function actionSpeak(message = "default message") {         returnthis->render("speak",['message' => $message]); 
      } 
   } 
?>

在使用PHP内置服务器运行基本应用模板,并在Web浏览器中打开 http://localhost:8080/index.php?r=site/contact 。您将看到以下页面−

Yii 控制器

在打开这个页面时,将执行 SiteController 的联系操作。代码首先加载 ContactForm 模型,然后渲染联系视图并将模型传递进去。

Yii 控制器

注意这次执行以下代码 –

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

如果有POST请求,我们将POST数据分配给模型并尝试发送邮件。如果成功,则设置一个带有文本“谢谢您联系我们。我们将尽快回复您。”的闪存消息,并刷新页面。

了解路由

在上面的例子中,在URL中, http://localhost:8080/index.php?r=site/contact ,路由是 site/contact 。在 SiteController 中执行联系操作( actionContact )。

一个路由由以下几部分组成 –

  • moduleID - 如果控制器属于一个模块,那么路由的这部分存在。

  • controllerID (以上例中为site) – 一个唯一的字符串,用于标识同一模块或应用程序中所有控制器中的控制器。

  • actionID (以上例中为contact) – 一个唯一的字符串,用于标识同一控制器中的所有操作。

路由的格式为 controllerID/actionID 。如果控制器属于一个模块,则其格式如下: moduleID/controllerID/actionID

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程