3.模块

模块

配置方法

  1. 创建自己的模块类


  1. 模块配置
//#main.php 主配置
//模块列表
'modules'   =>['main'=>['class'=>'\main\MainModule']],

//#local.php 环境配置
//#本地环境才开启的模块
'modules'=>
[
    //测试模块
    'test'=>
    [
        'class'     =>'\test\Module',
        'classFile' =>__DIR__.'/../../test/Module.php',
    ]
],

模块管理

use qing\facades\App;
dump(App::getModules());
dump(App::getModule('test'));
dump(App::getMainModule());

模块使用,定制模块

模块接口

interface ModuleInterface{
    /**
     * 模块初始化
     */
    public function initModule();
    /**
     * 模块执行前方法
     * 只有当前模块经过该方法
     *
     * @param \qing\router\RouteBag $routeBag
     * @return boolean
     */
    public function beforeModule($routeBag);
    /**
     * 模块执行后方法
     * 
     * @param \qing\router\RouteBag $routeBag
     */
    public function afterModule($routeBag);
}
//主模块接口
interface MainModuleInterface{
    /**
     * 主模块执行前方法
     * 
     * @param \qing\router\RouteBag $routeBag
     * @return boolean
     */
    public function beforeMainModule($routeBag);
}

模块执行的前置后置过滤方法

定制当前模块的控制器名和操作名

在自己的模块类中重写方法实现

  1. 操作名 index,对应的控制器类的操作函数名称可以是: indexAction actionIndex _index indexAct/indexAc

  2. 控制器名 index,对应的控制器类名可以是:
\main\controller\IndexController
\main\controller\Index
\main\controllers\site\Index
  1. 控制器目录属性'ctrlPaths',设置该属性可以从不同目录下寻找对应控制器文件
/**
 * 控制器映射
 * 
 * @var array
 */
public $ctrlPaths=["controller","controllers","controller\site"];

控制器名为index时,各个路径对应的控制器类和类名

- (应用根目录)
    - main(模块根目录)
        - controller(控制器目录1)
            - site(控制器目录1.1)
            - add(控制器目录1.2)
        - controllers(控制器目录2)
        - MainModule.php(主模块类)

接口

/**
 * 控制器映射
 * - 自路径或命名空间
 * - 使用\分隔符,用于命名空间
 * 
 * ["controller","controllers","controller\site"]
 * 
 * @var array
 */
public $ctrlPaths=['controller'];
/**
 * 格式化操作名
 *
 * #默认  :index
 * #1   :indexAction
 * #2   :actionIndex
 * #3   :_index
 * #4   :indexAct/indexAc
 *
 * @param string $action
 * @return string
 */
public function getActionName($actionName)
/**
 * 在控制器目录中寻找控制器类名和路径
 * 
 * 格式化控制器名/格式化控制器类名
 * DKEY_CTRL
 * 
 * @example \main\controller\IndexController
 * @example \main\controller\Index
 * @example \main\controllers\site\Index
 * @param string $ctrlName
 * @return string
 */
public function getCtrlName($ctrlName)