YII2 控制器部署 & 独立操作

url的访问,我们先说下url地址访问组成

路由

终端用户通过所谓的路由寻找到动作,路由是包含以下部分的字符串:

  • 模块ID: 仅存在于控制器属于非应用的模块;
  • 控制器ID: 同应用(或同模块如果为模块下的控制器) 下唯一标识控制器的字符串;
  • 操作ID: 同控制器下唯一标识操作的字符串。(操作ID通常为动词,如viewupdate等)

路由使用如下格式:

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

 

posted on 2019-05-20 15:38  追风的浪子  阅读(751)  评论(0)    收藏  举报

导航