在MVC结构中, 控制器的作用是处理来自用户的请求并生成响应。传入的请求由控制器进行分析, 传递到模型, 将模型结果定向到视图中, 最后生成响应。
控制器动作
控制器包含用户调用以执行请求的动作。一个控制器可以有多个请求。
以下代码是一个示例, 其中包含两个更新和在控制器文件SiteController.php中创建的动作。
<?php
namespace frontend\controllers;
use Yii;
use frontend\models\Yiicrud;
use frontend\models\SearchYiicrud;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
/**
* YiicrudController implements the CRUD actions for Yiicrud model.
*/
class YiicrudController extends Controller
{
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(), 'actions' => [
'delete' => ['POST'], ], ], ];
}
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('update', [
'model' => $model, ]);
}
}
/**
* Deletes an existing Yiicrud model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
*/
public function actionDelete($id)
{
$this->findModel($id)->delete();
return $this->redirect(['index']);
}
查看上面的代码, 动作更新(actionUpdate()), 它将首先根据请求的ID加载模型, 然后尝试使用请求数据包括新的模型实例并保存模型。然后, 它将被重定向以查看具有模型ID的操作。否则, 它将返回更新操作。
动作删除(actionDelete()), 它将根据请求的ID加载模型, 然后将其删除。它将被重定向到索引动作。
路线
在Yii URL中, 你必须已经注意到有一个r。这是路线。
例如:http://localhost/index.php?r = site / index
在上面的示例中, 路由为站点/索引。
其中包括以下部分:
moduleID:仅当控制器属于非应用程序模块时才适用。
controllerID:一个字符串, 用于标识同一模块内所有控制器中的控制器。在上面的示例中, 它是站点。
actionID:一个字符串, 用于标识控制器中所有动作中的动作名称。在上面的示例中, 它是索引。
路由格式为:
ControllerID / ActionID
如果属于模块, 则采用以下格式:
ModuleID/ControllerID/ActionID