应用配置文件
在创建新的Application的实例时,通过引入配置文件profile.php,可配置管理整个应用组件和MVC流程。
profile.php配置
路径设置
profile路径通过public/index.php入口文件中的Tiny\Tiny::createApplication($path, $profile)设置
$path 即APPLICATION_PATH;
$profile缺省配置为$path/profile.php;
Properties的实例化
参考类: Tiny\MVC\Application\Properties,继承自Tiny\Config\Configuration
// 在applicationBase::__construct()内实例化。
$app->properties; // 引用properties实例
在Controller的引用
// App\Controller\Main
$this->application->properties;
// or
$this->properties;
// 自动注解
public function indexAction(Properties $properties)
{
$properties;
}
其他
在Model层原则上不允许引用
View层中 通过$app->properties引用
Debug 调试模式
$profile['debug']['enabled'] = true; // 是否开启调试模式: bool FALSE 不开启 | bool TRUE 开启
$profile['timezone'] = 'PRC'; // 设置时区
$profile['charset'] = 'utf-8'; // 设置编码
#debug
$profile['debug']['event_listener'] = \Tiny\MVC\Event\DebugEventListener::class; // 通过注册监听事件 可通过此节点自定义新的debug插件
$profile['debug']['param_name'] = 'debug'; // 命令行下 通过--debug开启
$profile['debug']['cache']['enabled'] = true; // 是否在debug模式下启用应用缓存
$profile['debug']['console'] = false; // web环境下 debug信息是否通过javascript的console.log输出在console
可参考配置手册 Debug/调试模式
ExceptionHandler 异常处理句柄
exception.eanbled = true开启框架的异常处理。
Debug模式开启的开发模式下,会输出异常的详细信息。
Debug模式关闭的生产环境下,会静默输出异常信息,通过开启日志记录异常信息。
/**
* application的异常处理
*
* exception.enabled 开启application的异常处理
* true 设置application实例为异常处理句柄,监听异常事件并处理
* false 通过runtime默认异常处理
*
* exception.log 异常日志
* true 开启 异常输出到日志中
* false 关闭输出
*
* exception.logid 默认的异常日志id
* 如果是文件存储,则保留在runtime/log文件夹下,以logid命名的日志文件中
*/
$profile['exception']['enabled'] = true;
$profile['exception']['log'] = true;
$profile['exception']['logid'] = 'tinyphp_exception';
可参考配置手册 Runtime.ExceptionHandler/异常句柄
Boostrap 引导
bootstrap.enabled = true|false 选择关闭或开启引导类。
bootstrap.event_listener = class 可更改为自定义的实现了MvcEvent::EVENT_BOOTSTRAP监听事件的引导类
/**
* Application引导类
*
* 通过监听引导事件触发
*
* bootstrap.enabled
* 开启引导
*
* bootstrap.event_listener
* string 实现Bootstrapevent_listener的类名
* array [实现Bootstrapevent_listener的类名]
*
*/
$profile['bootstrap']['enabled'] = true;
$profile['bootstrap']['event_listener'] = \App\Event\Bootstrap::class;
可参考配置手册 Bootstrap/引导程序:application/events/Bootstrap.php
Builder 单文件打包
Builder是基于Phar扩展并以监听事件方式运行的打包器。
-
build.enabled = true|false 开启或关闭
-
build.event_listener = class 可自定义实现打包的监听事件接口
/**
* 打包器
*
* 仅在命令行环境的ConsoleApplication实例生效
*
* builder.enabled 是否开启单文件打包器
* true 开启 false 关闭监听
*
* builder.param_name 参数名
* php public/index --build 即可开启单文件打包
*
* builder.event_listener 打包器监听事件类
* 监听到输入参数 --build,即开始初始化打包器
*
* builder.path 打包器的配置文件夹
* 根据配置文件打包
*
* builder.config_path
* 附加到单文件执行时的application的配置数据
*
* builder.profile_path
* 附加到单文件执行时的application的propertis数据
*
*/
$profile['builder']['enabled'] = true;
$profile['builder']['param_name'] = 'build';
$profile['builder']['event_listener'] = \Tiny\MVC\Event\BuilderEventListener::class;
$profile['builder']['path'] = 'build/builder';
$profile['builder']['config_path'] = 'build/config';
$profile['builder']['profile_path'] = 'build/profile';
可参考配置手册 Builder/打包单一可执行文件
Daemon守护进程
Daemon 是基于pcntl扩展实现的父子进程守护程序。
- daemon.enabled = true|false 选择开启或关闭daemon的监听事件
- daemon.event_listener = class 可更改为自定义的daemon守护进程配置类
/**
* 守护进程的基本设置
*
* 仅在命令行环境的ConsoleApplication实例生效
*
* daemon.enabled
* 是否开启自动监听Daemon的命令行参数监听
*
* daemon.id 默认启动的服务ID
* id 即 daemon.policys数组里的key
*
* daemon.event_listener Daemon事件监听器
* 监听D命令行的-d --daemon参数 并实例化Daemon
*
* daemon.piddir
* 守护进程的PID保存目录
*
* daemon.tick
* 默认子进程退出后重建的间隔
*
* daemon.daemons 配置服务数组
* daemonid => [
* workers,子进程配置
* options => 附加给当前服务实例的选项
* ]
* workers的配置: 【
* id => worker的身份标识
* type => worker worker类型,默认为限定循环执行的子进程模式
* dispatcher => [controller,action,module]代理执行worker进程的控制器,动作参数, 模块
* num => 子进程的数量
* options => [] 附加给worker实例的参数
* type = worker:
* options => [
* runmax => 最大运行次数,避免内存占用过多系统阻塞
* tick => 重建子进程的间隔
* ]
* 】
*/
$profile['daemon']['enabled'] = true;
$profile['daemon']['id'] = 'tinyphp-daemon';
$profile['daemon']['event_listener'] = \Tiny\MVC\Event\DaemonEventListener::class;
$profile['daemon']['piddir'] = '{runtime}/pid/';
$profile['daemon']['tick'] = 2;
$profile['daemon']['daemons'] = [
'tinyphp-daemon' => [
'workers' => [
['id' => 'index', 'type' => 'worker' , 'dispatcher' => ['controller' => 'main', 'action' => 'index', "module" => ''], 'num' => 1, 'options' => ['runmax' => 1024, 'tick' => '10']],
['id' => 'test', 'worker' => 'worker' , 'dispatcher' => ['controller' => 'main', 'action' => 'test', 'module' => ''], 'num' => 1, 'options' => ['runmax' => 1024, 'tick' => '1']]
],
'options' => [],
],
];
可参考配置手册 Daemon/守护进程。
Configuration 配置
config.enabled = true|false 选择是否开启应用的配置实例。
/**
* 当前Application实例下的Configuration实例设置
*
* config.enabled 是否开启配置
* true 开启 | false 关闭
*
* config.path 配置文件的相对路径
* array [file|dir] 可配置多个路径
* string file 单个配置文件路径
* string dir 文件夹路径
*
* config.cache.enabled 是否缓存配置
* 开启缓存,将读取所有配置文件并解析后,缓存至本地PHP文件
* 配置文件内严禁函数,类等命名和操作,否则缓存数据无法解析
*
*/
$profile['config']['enabled'] = true;
$profile['config']['path'] = 'config/';
$profile['config']['cache']['enabled'] = true;
示例
// 通过.分隔子节点
$config->get('default.a.b');
// 可用数组形式调用配置
$config['default.a.b'];
// 获取配置所有数据
$config->get();
// 动态更改配置节点
$config['default.a.b'] = 'tinyphp';
$config->set('default.a.b', 'tinyphp');
configuration可通过set方式更改配置节点数据,但并不会持久化保存。
可参考配置手册 Configuration配置/应用配置类:application/config
Lang配置
lang.enabled = true|false 选择是否开启应用的配置实例。
/**
* Application的语言包设置
*
* lang.enabled 开启语言包实例化
*
* lang.locale 默认语言包
* zh_cn 中文语言包
*
* lang.path 存放语言包配置文件的路径
* 路径配置同config
*
* lang.cache.enabled 开启缓存
* 开启将所有语言包数据缓存
*/
$profile['lang']['enabled'] = true; // 是否开启
$profile['lang']['locale'] = 'zh_cn'; // 默认语言包
$profile['lang']['path'] = 'lang/'; // 存放语言包的目录
$profile['lang']['cache']['enabled'] = true; // 配置模块缓存设置 提高性能
可参考配置手册 Lang/语言包配置:application/lang
Logger配置
log.enabled = true|false 可选择开启或关闭日志
/**
* application的日志配置
*
* log.enabled 开启日志处理
*
* log.wirter 日志写入器
* file 写入到本地文件
* syslog 通过系统syslog函数写入到系统文件夹
* rsyslog 通过rsyslog协议,写入到远程文件夹
*/
$profile['log']['enabled'] = true;
$profile['log']['writer'] = 'file'; /*默认可以设置file|syslog 设置类型为file时,需要设置log.path为可写目录路径 */
$profile['log']['path'] = '{runtime}/log/';
可参考配置手册 Logger/日志收集配置:runtime/log
Data数据源管理
Data管理所有的外部数据源
- data.enabled = true|false 是否开启数据池管理
/**
* 数据资源池配置
*
* data.enabled 开启数据资源池
* true 开启|false 关闭
* data.default_id 默认ID
* 默认调用datasource的ID
*
* data.drivers 驱动数组
*
* data.sources 数据资源池配置
* driver = db.mysqli|db.pdo| [
* id => 调用时使用的ID字段
* host 通用的远程资源
* prot 通用的远程端口
* password 通用密码
* dbname 数据库名称
* ]
*
* driver = redis [
* id => 调用时使用的ID字段
* host => 远程host 单独设置的host & prot 会合并到servers内
* port => 远程端口
* db => 选择的DB Index
* servers => [[host => 服务, port => 端口]]
* ]
*
* driver = memcached [
* servers => [[host=> 服务地址, port=> 端口]]
* persistent_id => 共享实例的ID
* options => [选项]
* ]
*/
$profile['data']['enabled'] = true; /* 是否开启数据池 */
$profile['data']['default_id'] = 'default';
$profile['data']['drivers'] = [];
$profile['data']['sources'] = [
['id' => 'default', 'driver' => 'db.pdo', 'charset' => 'utf8mb4', 'host' => '127.0.0.1', 'port' => '3306', 'user' => 'root', 'password' => '123456', 'dbname' => 'mysql'],
['id' => 'redis', 'driver' => 'redis', 'host' => '127.0.0.1', 'port' => '6379', 'db' => 0],
['id' => 'redis_cache', 'driver' => 'redis', 'servers' => [['host' => '127.0.0.1', 'port' => '6379']]],
['id' => 'redis_session', 'driver' => 'redis', 'host' => '127.0.0.1', 'port' => '6379'],
['id' => 'redis_queue', 'driver' => 'redis', 'host' => '127.0.0.1', 'port' => '6379'],
['id' => 'memcached', 'driver' => 'memcached', 'servers' => [['host' => '127.0.0.1', 'port' => '11211']], 'persistent_id' => null, 'options' => []]
];
可参考配置手册 Data/数据源配置
Cache
cache.enabled = true|false 是否开启应用的缓存实例。
/**
* Application的缓存设置
*
* 支持的存储器类型
* file => Tiny\Cache\Storager\File 文件存储
* memcached => Tiny\Cache\Storager\Memcached memcache存储
* php => Tiny\Cache\Storager\PHP PHP文件序列化存储
* redis => Tiny\Cache\Storager\Redis Redis存储
* SingleCache => Tiny\Cache\Storager\SingleCache 单文件存储 适合小数据快速缓存
*
* cache.enabled 开始缓存
* true 开启 | false 关闭
*
* cache.ttl 默认的缓存过期时间
* ttl 可单独设置
*
* cache.dir 默认的本地文件缓存路径
* string dir 只可设置为文件夹
*
* cache.application_storager
* string 当前应用实例的缓存存储器
*
* cache.default_id 默认的缓存资源ID
* $cache 将缓存实例当缓存调用时所调用的cacheID
*
* cache.application
* 是否对application的lang container config等数据进行缓存
*
* cache.storagers 缓存存储器的注册列表
* [
* key => value
* 存储器ID => 存储器类全程
* 'file' => \Tiny\Cache\File::class
* ]
* 添加后,即可在cache.sources节点的storager引用
*
* cache.sources 缓存源
* 本框架的远程缓存源通过datasource统一调度管理
* id => 调用缓存资源的ID
* storager = redis [
* options => [
* ttl => 默认过期时间
* dataid => 调用的data sources ID
* ]
* ]
*
* storager => memcached [
* options => [
* ttl => 默认的过期时间
* dataid => 调用的data source id
* ]
*
* ]
*
* storager => file [
* options =>
* ]
*/
$profile['cache']['enabled'] = true;
$profile['cache']['ttl'] = 3600;
$profile['cache']['dir'] = '{runtime}/cache/';
$profile['cache']['default_id'] = 'default';
$profile['cache']['storagers'] = [];
$profile['cache']['sources'] = [
['id' => 'default', 'storager' => 'redis', 'options' => ['ttl' => 3600, 'dataid' => 'redis_cache']],
['id' => 'memcached', 'storager' => 'memcached', 'options' => ['ttl' => 3600, 'dataid' => 'memcached']],
['id' => 'file', 'storager' => 'file', 'options' => ['ttl' => 3600, 'path' => '']],
['id' => 'php', 'storager' => 'php', 'options' => ['ttl' => 3600, 'path' => '']]
];
/**
* 当前应用实例的缓存配置
*
* cache.application_storager ApplicationCache调用的存储器类型
* 默认为SingleCache 适合小数据的快速存储应用,php文件存储于opcache内存中,IO性能很好。
*
* cache.application_ttl ApplicationCache的缓存过期时间
* int 60
*
*/
$profile['cache']['application_storager'] = SingleCache::class;
$profile['cache']['application_ttl'] = 60;
可参考配置手册 Cache/缓存配置:runtime/cache
Session
session.enabled = true|false 是否开启当前应用的session实例。
/**
* HTTP SESSION设置
*
* 仅在WEB环境下有效
*
* session.enabled
* 开启框架自动代理SESSION处理
*
* session.domain
* session cookie生效的域名设置
*
* session.path
* session cookie生效的路径设置
*
* session.expires
* SESSION过期时间
*
* session.adapter SESSION适配器
* redis 以datasource的redis实例作为session适配器
* memcache 以datasource的rmemcached实例作为session适配器
*
* session.dataid
* 根据session.adapter选择对应的data资源实例
**/
$profile['session']['enabled'] = true;
$profile['session']['domain'] = '';
$profile['session']['path'] = '/';
$profile['session']['expires'] = 36000;
$profile['session']['adapter'] = 'redis';
$profile['session']['dataid'] = 'redis';
可参考配置手册 Session配置:Tiny/MVC/Web/Session
Filter过滤器设置
filter.enabled = true|false 是否开启当前应用的filter实例。
/**
* application的过滤器配置
*
* filter.enabled 开启过滤
*
* filter.web WEB环境下的过滤器设置
* string classname 实现FilterInterface的过滤器
* array [filterInterface]
*
* filter.console 命令行环境下的过滤器设置
* string classname 实现FilterInterface的过滤器
* array [filterInterface]
*
* filter.filters 通用过滤器设置
* array [FilterInterface]
*/
$profile['filter']['enabled'] = true;
$profile['filter']['web'] = \Tiny\Filter\WebFilter::class;
$profile['filter']['console'] = \Tiny\Filter\ConsoleFilter::class;
$profile['filter']['filters'] = [];
可参考配置手册 Filter配置:Tiny\Filter
Cookie
Cookie的配置。。。
/**
* HTTP COOKIE设置
*
* 仅在web环境下生效
*
* cookie.domain
* 默认的cookie生效域名
*
* cookie.path
* 默认的cookie生效路径
*
* cookie.expires
* 默认的cookie过期时间
*
* cookie.prefix
* 默认的cookie前缀
*
* cookie.encode
* cookie是否编码
*/
$profile['cookie']['domain'] = '';
$profile['cookie']['path'] = '/';
$profile['cookie']['expires'] = 3600;
$profile['cookie']['prefix'] = '';
$profile['cookie']['encode'] = false;
可参考配置手册 Cookie配置:Tiny\MVC\Web\HttpCookie
MVC的流程控制
路由配置
/**
* Application的路由设置
*
* router.enabled 开启路由
* true 开启 | false 关闭
*
* router.routes 注册自定义的route
* [
* routeid => route classname
* ]
*
* router.rules 注册的路由规则
* [
* route = pathinfo [
* rule => [ext => 扩展名, domain => 适配域名]
* ]
* route = regex [
* rule => [regex => 匹配正则, keys => [匹配正则后替换的键值映射表,$1-9即regex匹配数组的索引值]]
* ]
* ]
*/
$profile['router']['enabled'] = true; // 是否开启router
$profile['router']['routes'] = []; // 注册自定义的route
$profile['router']['rules'] = [
['route' => 'pathinfo', 'rule' => ['ext' => '.html' , 'domain' => '*']],
];
Response 当前应用的响应实例配置。
/**
* Application的响应实例配置
*
* response.formatJsonConfigId
* response格式化输出JSON 默认指定的语言包配置节点名
* status => $this->lang['status'];
*/
$profile['response']['formatJsonConfigId'] = 'status';
当前应用的控制器实例配置。
/**
* Application的控制器配置
*
* controller.namespace 相对Application命名空间的命名空间配置
* default Controller Web环境下的控制器命名空间, 如App的命名空间为\App, 即\App\Controller
* console Console\Console 命令行下的相对控制器命名空间
* rpc Controller\Rpc
*
* controllr.src
* 控制器的源码加载目录
*
* controller.default
* 默认的控制器名称
*
* controller.param
* 默认的控制器参数
*
* controller.action_default
* 默认的控制器动作名称
*
* controller.action_param
* 默认的控制器动作参数
*
*/
$profile['controller']['namespace']['default'] = 'Controller';
$profile['controller']['namespace']['console'] = 'Controller\Console';
$profile['controller']['namepsace']['rpc'] = 'Controller\RPC';
$profile['controller']['src'] = 'controller/';
$profile['controller']['default'] = 'main';
$profile['controller']['param'] = 'c';
$profile['controller']['action_default'] = 'index';
$profile['controller']['action_param'] = 'a';
模型层配置
/**
* Application的模型层设置
*
* model.namespace
* 相对app.namespace下的模型层命名空间 如\App\Model
*
* model.src 模型层的存放目录
*/
$profile['model']['namespace'] = 'Model';
$profile['model']['src'] = 'models/';
视图层控制。
/**
* 视图设置
*
* 默认模板解析的扩展名列表
* .php PHP原生引擎
* .tpl Smarty模板引擎
* .htm|.html Template模板引擎
*
* view.src
* 视图模板存放的根目录
* example: application/views/
*
* template_dirname
* 视图模板目录下的默认存放子级目录
* example: views/default/
*
* lang.enabled
* 是否加载对应的语言包子级目录
* example: views/zh_cn/ 查找不到后,去默认模板目录里views/default/寻找
*
* view.compile
* 视图模板编译后的存放目录
*
* view.config
* 视图模板的配置存放目录
*
* view.assign
* 视图模板的预先加载配置数组
*
* view.engines 视图引擎配置
* engine => 视图模板解析类名
* ext => [] 可解析的模板文件扩展名数组
* config => [] 引擎初始化时的配置
*
* Example: Template引擎的插件配置
* engine => \Tiny\MVC\View\Engine\Template:
* config => [plugins => [
* 'plugin' => '\Tiny\MVC\View\Engine\Template\Url' , 'config' => []
* ]]
*
* view.helper 视图助手配置
* helper => classname 助手类名
* config => [] 助手初始化时的配置
*
* view.cache.enabled 是否开启视图缓存
* 默认不开启
*
* view.cache.dir 缓存目录
* view.cache.ttl 缓存过期时间
*/
$profile['view']['basedir'] = 'views/';
$profile['view']['theme'] = 'default';
$profile['view']['lang'] = true; //自动加载语言包
$profile['view']['paths'] = [];
$profile['view']['compile'] = '{runtime}/view/compile/';
$profile['view']['config'] = '{runtime}/view/config/';
$profile['view']['assign'] = [];
// 引擎和助手配置
$profile['view']['engines'] = [];
$profile['view']['helpers'] = [];
/*
* 视图的全局静态资源配置
*
* view.static.basedir 视图静态资源的存储根目录
* {static} => $profile['src']['static']
*
* view.static.public_path 视图静态资源的公开访问地址
* /static/ 当前域名下的绝对路径
* http://demo.com/static 可指定域名
*
* view.static.engine 是否开启视图解析的模板引擎
* 当前支持css js 图像文件的自动解析和生成
*
* view.static.minsize 静态模板引擎复制文件的最小大小
* 小于最小大小的,直接注入文件内容
* 大于最小大小的,在staic目录下生成对应外部文件在html下加载
*
* view.static.exts
* view.static.engine支持解析的静态资源扩展名
*
*/
$profile['view']['static']['basedir'] = '{static}';
$profile['view']['static']['public_path'] = '/static/';
$profile['view']['static']['engine'] = true;
$profile['view']['static']['minsize'] = 2048;
$profile['view']['static']['exts'] = ['css', 'js','png', 'jpg', 'gif'];
可参考配置手册
- Controller/控制器配置:application/controllers/
- Router/路由器配置
- Dispatcher/派发器配置
- Model/模型:application/models
- Viewer/视图:demo/application/views
- Event/MVC事件配置
Application的路径管理和配置
路径设置: 每个src下的路径节点,都可以在路径中通过{node}表示并被替代。
* {app} = APPLICATION_PATH
* {public} = $profile['src']['public'];
/**
* application的路径设置
*
* {app} 默认为APPLICATION_PATH
* 每个src.nodename可作为标签{nodename}按顺序在后续的路径中被自动替换
*
* src.path
* application的根路径
*
* src.public
* 入口文件夹,存放静态文件和项目文件夹
*
* src.resources
* 资源文件的存放目录 一般与application目录平行
*
* src.runtime
* 运行时文件存放目录
*
* src.tmp
* 运行时的临时文件夹
*
* src.global
* 存放全局类的文件夹
*/
$profile['src']['path'] = '{app}'; // application源码路径
$profile['src']['public'] = '{app}../public/'; // 入口文件夹
$profile['src']['static'] = '{public}static/'; // 静态资源文件夹
$profile['src']['resources'] = '{app}../resource/'; // 资源文件夹
$profile['src']['runtime'] = '{app}../runtime/'; // 运行时文件夹
$profile['src']['tmp'] = '{runtime}tmp/'; // 临时文件夹
$profile['src']['global'] = 'librarys/global/'; // 存放全局类的文件夹
$profile['src']['library'] = 'librarys/'; // 除了composer外,引入的其他项目的库文件夹
$profile['src']['controller'] = 'controllers/web/'; // web环境下的控制器类文件夹
$profile['src']['model'] = 'models/'; // 模型类文件夹
$profile['src']['console'] = 'controllers/console/'; // 命令行环境下的控制器类文件夹
$profile['src']['rpc'] = 'controllers/rpc/'; // rpc模式下的控制器类文件夹
$profile['src']['view'] = 'views/'; // 存放、、】视图模板的文件夹
$profile['src']['vendor'] = '{app}../vendor/';
$profile['src']['event'] = 'events/';
$profile['src']['common'] = 'librarys/common/';
需要进行路径处理的profile节点配置。
/**
* 需要做路径处理的路径节点列表
* [propertis.nodename...]
* 作为路径传递的配置节点名,在相对路径前添加application_path的绝对路径,并替换src里的标签,./,../,相对路径等。
*/
$profile['path'] = [
'src.path',
'src.public',
'src.static',
'src.runtime',
'src.resources',
'src.tmp',
'src.vendor',
'builder.path',
'builder.profile_path',
'builder.config_path',
'config.path',
'lang.path',
'log.path',
'cache.dir',
'view.basedir',
'view.cache.dir',
'view.compile',
'view.config',
'view.path',
'module.tinyphp-ui.template_dirname',
'view.static.basedir',
'src.library',
'src.global',
'src.controller',
'src.console',
'src.rpc',
'src.model',
'src.common',
'src.event',
'daemon.piddir',
'daemon.logdir',
'container.provider_path',
'module.path',
];
可参考配置手册 Tiny\MVC\Application\Properties/Properties配置:application/config/profile
Application下的自动加载管理
/**
* 自动加载类配置
* xc v≈Ω
* autoloader.namespaces 命名空间加载配置
* namespace => properties.path.nodes
*
* autoloader.classes 类文件的加载配置
* classname => propertis.path.node
*
* autoloader.is_realpath 是否绝对路径加载
* true 绝对路径加载
* false propertis.path里的路径加载
*/
$profile['autoloader']['namespaces'] = [
'App' => 'src.library',
'App\Controller' => 'src.controller',
'App\Controller\Console' => 'src.console',
'App\Controller\Rpc' => 'src.rpc',
'App\Model' => 'src.model',
'App\Event' => 'src.event',
'App\Common' => 'src.common',
'*' => 'src.global',
];
$profile['autoloader']['classes'] = [];
$profile['autoloader']['is_realpath'] = false;