YII2 控制器部署 & 独立操作
url的访问,我们先说下url地址访问组成
路由
终端用户通过所谓的路由寻找到动作,路由是包含以下部分的字符串:
- 模块ID: 仅存在于控制器属于非应用的模块;
- 控制器ID: 同应用(或同模块如果为模块下的控制器) 下唯一标识控制器的字符串;
- 操作ID: 同控制器下唯一标识操作的字符串。(操作ID通常为动词,如
view,update等)
路由使用如下格式:
ControllerID/ActionID
如果属于模块下的控制器,使用如下格式:
ModuleID/ControllerID/ActionID
一、控制器部署:controllerMap
该属性允许你指定一个控制器 ID 到任意控制器类。
Yii 遵循一个默认的 规则是指定控制器 ID 到任意控制器类(如 post对应app\controllers\PostController)。 通过配置这个属性,可以打破这个默认规则,在下面的例子中, account对应到app\controllers\UserController, article 对应到 app\controllers\PostController。
这样我们就可以在不通过前端修改路由(名)的情况下,后端可以进行随意的入由指向。
配置如下(在应用的全局配置中进行配置):
[
'controllerMap' => [
'account' => 'app\controllers\UserController',
'article' => [
'class' => 'app\controllers\PostController',
'enableCsrfValidation' => false,
],
],
]
默认我们是通过路由:
index.php?r=user/index 进行访问 user控制器下的index方法的,现在我们就可以通过 index.php?r=account/index 进行访问了(控制器的映射)
index.php?r=post/index 进行访问 post控制器下的index方法的,现在我们就可以通过 index.php?r=article/index 进行访问了(控制器的映射)
总结:
这里我们可以简化控制器名,达到别名的效果;或者在版本中开发中,后台修改了业务逻辑,新写了一个控制器方法,这样我们可以不通过前端修改代码的情况下,我们后台进行控制器的映射达到接口替换的效果。
二、独立操作
创建操作ID:内联操作和独立操作. An inline action is 内联操作在控制器类中定义为方法;独立操作是继承yii\base\Action或它的子类的类。 内联操作容易创建,在无需重用的情况下优先使用; 独立操作相反,主要用于多个控制器重用, 或重构为扩展。
在控制器文件中申明独立操作的方法:
public function actions()
{
return [
// 用类来申明"error" 动作
'error' => 'yii\web\ErrorAction',
// 用配置数组申明 "view" 动作
'view' => [
'class' => 'yii\web\ViewAction',
'viewPrefix' => '',
],
];
}
这样我们就达到了,action方法重用的问题,或者说多个接口入口。
其实我们也可以通过在一个控制器中调用另外一个控制器的action方法,如:
public function actionTest()
{
\Yii::$app->runAction('mail/send-email', ['arr' => $_SERVER]);
}
浙公网安备 33010602011771号