think\App::module PHP Method

module() public static method

执行模块
public static module ( array $result, array $config, boolean $convert = null ) : mixed
$result array 模块/控制器/操作
$config array 配置参数
$convert boolean 是否自动转换控制器和操作名
return mixed
    public static function module($result, $config, $convert = null)
    {
        if (is_string($result)) {
            $result = explode('/', $result);
        }
        $request = Request::instance();
        if ($config['app_multi_module']) {
            // 多模块部署
            $module = strip_tags(strtolower($result[0] ?: $config['default_module']));
            $bind = Route::getBind('module');
            $available = false;
            if ($bind) {
                // 绑定模块
                list($bindModule) = explode('/', $bind);
                if (empty($result[0])) {
                    $module = $bindModule;
                    $available = true;
                } elseif ($module == $bindModule) {
                    $available = true;
                }
            } elseif (!in_array($module, $config['deny_module_list']) && is_dir(APP_PATH . $module)) {
                $available = true;
            }
            // 模块初始化
            if ($module && $available) {
                // 初始化模块
                $request->module($module);
                $config = self::init($module);
            } else {
                throw new HttpException(404, 'module not exists:' . $module);
            }
        } else {
            // 单一模块部署
            $module = '';
            $request->module($module);
        }
        // 当前模块路径
        App::$modulePath = APP_PATH . ($module ? $module . DS : '');
        // 是否自动转换控制器和操作名
        $convert = is_bool($convert) ? $convert : $config['url_convert'];
        // 获取控制器名
        $controller = strip_tags($result[1] ?: $config['default_controller']);
        $controller = $convert ? strtolower($controller) : $controller;
        // 获取操作名
        $actionName = strip_tags($result[2] ?: $config['default_action']);
        $actionName = $convert ? strtolower($actionName) : $actionName;
        // 设置当前请求的控制器、操作
        $request->controller(Loader::parseName($controller, 1))->action($actionName);
        // 监听module_init
        Hook::listen('module_init', $request);
        try {
            $instance = Loader::controller($controller, $config['url_controller_layer'], $config['controller_suffix'], $config['empty_controller']);
            if (is_null($instance)) {
                throw new HttpException(404, 'controller not exists:' . Loader::parseName($controller, 1));
            }
            // 获取当前操作名
            $action = $actionName . $config['action_suffix'];
            if (!preg_match('/^[A-Za-z](\\w)*$/', $action)) {
                // 非法操作
                throw new \ReflectionException('illegal action name:' . $actionName);
            }
            // 执行操作方法
            $call = [$instance, $action];
            Hook::listen('action_begin', $call);
            $data = self::invokeMethod($call);
        } catch (\ReflectionException $e) {
            // 操作不存在
            if (method_exists($instance, '_empty')) {
                $reflect = new \ReflectionMethod($instance, '_empty');
                $data = $reflect->invokeArgs($instance, [$action]);
                self::$debug && Log::record('[ RUN ] ' . $reflect->__toString(), 'info');
            } else {
                throw new HttpException(404, 'method not exists:' . (new \ReflectionClass($instance))->getName() . '->' . $action);
            }
        }
        return $data;
    }