Thinkphp+Webman=Pandaman 轻框架分享

wasoncheung

为什么有了Thinkphp和Webman还要如此蛋疼的搞个Pandaman出来?

在深度折腾过两者后,基于自己的使用痛点,改善而来。

传统的PHP框架笨重,workerman已经很好的解决了

容器管理 现代开发中已经必不可少了。基于容器做开发,后期可以对各种实现的无缝切换。
同时对于类也可以很好的解耦

在使用workerman后 遇到的最多的问题,就是隐藏的bug,这并不是worker的问题。很多composer包都不适用于这种持久环境,这种问题及其隐秘,你不打印根本不可能知道。
.....

Pandaman的特点

框架非常简单,结构层次分明,每个阶段都有钩子,方面随时扩展

可以任意增改系统流程

(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

2165 1 0
1个评论

tangniyuqi

兄弟不错啊 支持

  • 暂无评论

wasoncheung

1070
积分
0
获赞数
0
粉丝数
2022-11-15 加入
🔝