在深度折腾过两者后,基于自己的使用痛点,改善而来。
传统的PHP框架笨重,workerman已经很好的解决了
容器管理 现代开发中已经必不可少了。基于容器做开发,后期可以对各种实现的无缝切换。
同时对于类也可以很好的解耦在使用workerman后 遇到的最多的问题,就是隐藏的bug,这并不是worker的问题。很多composer包都不适用于这种持久环境,这种问题及其隐秘,你不打印根本不可能知道。
.....
可以任意增改系统流程
(new App()) // 设置环境 ->setEnv('dev') // 初始化链 程序启动前的必备工作 讲究顺序 比如配置加载合并 ->appInit() // 启动链 程序可以做些运行前的工作,比如注册路由 注册插件 webman的bootstraps可以在这里实现 内置实现了thinkphp的services ->appBoot() // 运行链 核心业务的运行模块,例如http-server 请求只会在这一层处理 ->appRun();
// 初始化器
private array $initializers = [
// 加载公共函数
LoadFunctions::class,
// 加载内置函数
LoadBuiltinFunctions::class,
// 加载全局配置文件
LoadConfigFiles::class,
// 合并环境配置到全局配置
MergeEnvConfigs::class,
// 初始化应用状态
AppStatusInit::class
];
// 启动器
private array $bootstraps = [
//加载全局容器配置
LoadProviders::class,
// 加载事件配置
LoadEvents::class,
// 加载多语言
LoadLang::class
];
默认的配置流程是 超全局配置(类似环境配置)->全局配置。系统会自动覆盖全局配置
debug=true
timezone=Asia/ShangHai
lang.default=zh-cn
cache.default=file
monitor.command=php bin.php http
session.default=redis
route.404_template=111
这也是我喜欢thinkphp的地方 能依赖注入就不想别的。
// 还可以这样注入依赖
#[Autowired]
private Route $route;
// 获取配置
#[GetConfig('route.root_path')]
private string $routePath;
相对注释 属性类更加优雅,内置的路由,控制器 服务注册都是用属性类实现的
#[GET] #[Middleware([Test::class])] public function index(): string { return 'index'; }
总体的中间件,事件,缓存,日志 等等 都和thinkphp webman一模一样
不同的是全部采用了容器来管理
目前还有视图没有完成,路由和控制器还需要在使用中发现和修复问题。如果你闲着无聊,那就一起来玩玩吧仓库已经上传,欢迎大神指教。(我没学过php硬上手的,遇到喷点,轻点喷)
https://github.com/wasonCheung/pandaman
兄弟不错啊 支持