123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?php
- /**
- * FecShop file.
- *
- * @link http://www.fecshop.com/
- * @copyright Copyright (c) 2016 FecShop Software LLC
- * @license http://www.fecshop.com/license/
- */
- namespace fec\controllers;
- use Yii;
- use yii\web\Controller;
- ##################################################################################################################################
- # 1.在执行前,先进行module token验证,通过方可继续执行
- # 2.通过controller action 自动找到对应的 o文件下的文件,文件路径和方法保持对应
- # 3.函数执行完毕,返回的是json格式的数据
- # 4.在返回数据之前,进行session的提交,保证修改的session提交到redis。
- ##################################################################################################################################
- /**
- * @author Terry Zhao <2358269014@qq.com>
- * @since 1.0
- */
- class ModulesapiController extends Controller
- {
-
- # 通过 controller action 自动找到 模块 ./o文件夹下面的文件,通过对应关系匹配
- public function actions()
- {
- $return = [];
-
- $module_token = Yii::$app->request->post('module_token');
- $this_module_token = \fec\helpers\CModule::getToken();
- if($module_token != $this_module_token){
-
- $return['ack'] = false;
- $return['ack_description'] = "modules token is not right";
- $return['content'] = $module_token.'#'.$this_module_token;
- echo json_encode($return);
- exit;
- }
- $r = $this->getControllerAndAction();
- $t_controller = $r['controller'];
- $t_action = $r['action'];
- $current_remote_function_param_array = Yii::$app->request->post('current_remote_function_param_array');
- $current_remote_function_param_array = unserialize($current_remote_function_param_array);
- $param = (!empty($current_remote_function_param_array) && is_array($current_remote_function_param_array) ) ? $current_remote_function_param_array : [] ;
- $current_namespace = $this->_name_space;
- $module_o_dir = str_replace("\\controllers","\\o",$current_namespace);
-
- $function_exec = $module_o_dir."\\".$t_controller."::".$t_action;
- $data = \call_user_func_array($function_exec, $param);
- $data = json_decode($data);
- $return['ack'] = true;
- $return['ack_description'] = "success";
- $return['content'] = $data;
- # 把模块更新的session更新到redis上面,以供其他模块使用
- session_commit();
- echo json_encode($return);
- exit;
- }
- # 得到当前的controller 和action
- public function getControllerAndAction(){
- $path_info = Yii::$app->request->getPathInfo();
- $path_info = trim($path_info,"/");
- $controller_str = substr($path_info,strpos($path_info,"/")+1);
- $str = strrev($controller_str);
- $action = strrev(substr($str,0,strpos($str,"/")));
- $controllerstr = strrev(substr($str,strpos($str,"/")+1));
- $controllerstr = explode("/",$controllerstr);
- $arr = [];
- $count = count($controllerstr);
- $i = 0;
- foreach($controllerstr as $v){
- $i++;
- if($count == $i){
- $arr[] = ucfirst($v);
- }else{
- $arr[] = strtolower($v);
- }
- }
- return [
- 'controller' => implode("/",$arr),
- 'action' => $action,
- ];
- }
-
-
-
-
-
-
-
-
-
-
-
- }
|