laruence / yaf

Fast php framework written in c, built in php extension
http://pecl.php.net/package/yaf
Other
4.52k stars 1.37k forks source link

建议能不能让控制器、模块这些都能支持完整的命名空间 #539

Open chenliq opened 3 years ago

chenliq commented 3 years ago

举例 Admin中有个User控制器,目前文件是 modules/Admin/controllers/User.php,代码是:

<?php
class UserController{}

期望代码是:

<?php
namespaces modules\Admin\controllers;
class User{}

如果能配置把Action后缀给去掉就更好了

目前的问题是: modules/Admin/controllers/User.php modules/Api/controllers/User.php 两个文件的全部没有命名空间,IDE会报相同的方法已在项目中多次定义,强迫症看着很难受,而且也不符合完整的命名空间规范。建议可以配置,支持完整的命名空间

Attax commented 3 years ago

有同样的需求,现在带action的方案看起来不太好

tamia6 commented 3 years ago

有同样的需求,最好是不需要 modules 文件夹,直接 app/admin/controllers 或者 app/controllers 就是单模块模式,取消 action 后缀

chenliq commented 3 years ago

有同样的需求,最好是不需要 modules 文件夹,直接 app/admin/controllers 或者 app/controllers 就是单模块模式,取消 action 后缀

多模块还是有需求场景的,比如一个大项目中不同的模块有不同的二级域名绑定之类的。 mail.qq.com 绑定 modules/mail admin.qq.com 绑定modules/admin。类似这种

tamia6 commented 3 years ago

有同样的需求,最好是不需要 modules 文件夹,直接 app/admin/controllers 或者 app/controllers 就是单模块模式,取消 action 后缀

多模块还是有需求场景的,比如一个大项目中不同的模块有不同的二级域名绑定之类的。 mail.qq.com 绑定 modules/mail admin.qq.com 绑定modules/admin。类似这种

我的意思并不是取消多模块,而是程序第一次运行时只能识别时候是多模块模式,而不需要额外添加一个 modules 文件夹来支持多模块。如项目文件夹是 app/controllers 这种结构,那就是单模块,若是 app/admin/controllers,app/mail/controllers 这种结构,则是多模块

Attax commented 3 years ago

有同样的需求,最好是不需要 modules 文件夹,直接 app/admin/controllers 或者 app/controllers 就是单模块模式,取消 action 后缀

多模块还是有需求场景的,比如一个大项目中不同的模块有不同的二级域名绑定之类的。 mail.qq.com 绑定 modules/mail admin.qq.com 绑定modules/admin。类似这种

我的意思并不是取消多模块,而是程序第一次运行时只能识别时候是多模块模式,而不需要额外添加一个 modules 文件夹来支持多模块。如项目文件夹是 app/controllers 这种结构,那就是单模块,若是 app/admin/controllers,app/mail/controllers 这种结构,则是多模块

附议

infatu8 commented 3 years ago

根据 约定大于配置 的原则,这些都不是问题 yaf追求的是简单可用,配置太多太复杂,这就根yaf一开始设计的思想不一样了 想要方便其实可以不用yaf

fanqingxuan commented 3 years ago

现在基本开源类库都遵循psr规范,希望yaf支持下标准规范,不然引入类库后有文件是命名空间格式,有的不是,感觉很乱

lovelock commented 3 years ago

Springboot其实也不支持有同名的controller类,在不同的包里面都不行。

yunx-lee commented 2 years ago

有同样的需求,最好是不需要 modules 文件夹,直接 app/admin/controllers 或者 app/controllers 就是单模块模式,取消 action 后缀

多模块还是有需求场景的,比如一个大项目中不同的模块有不同的二级域名绑定之类的。 mail.qq.com 绑定 modules/mail admin.qq.com 绑定modules/admin。类似这种

多模块我认为不是非用不可 但对于绑定不同域名,我们可以分多应用呀。 使用yaf_gc生成的结构如下:

yaf-demo
├── application
│   ├── Bootstrap.php
│   ├── controllers
│   │   ├── Error.php
│   │   └── Index.php
│   ├── library
│   │   └── readme.txt
│   ├── models
│   │   └── Sample.php
│   ├── plugins
│   │   └── Sample.php
│   └── views
│       ├── error
│       │   └── error.phtml
│       └── index
│           └── index.phtml
├── conf
│   └── application.ini
├── index.php
└── readme.txt

这是一个单应用结构,其中application是应用目录,可以看到conf在application外面,而library是在application中的。 如果我们要创建一个多应用的项目,而且需要共有项目类库,就得把library从application中提到外面来变成多应用共用的。 入口文件index.php放在这里,如果不在webserver配置访问权限,会有安全问题,所以我们把字放到application/public/index.php application/public 目录就是web站点根目录。 然后我们将这个application改个名字变成admin,他绑定admin.xxx.com这个域名。 我们再拷贝一个admin到mail,绑定mail.xxx.com这个域名 conf/application.ini 中 修改一下本地library的目录,完美地用多应用的方式实现多域名绑定。 最后结构大致如下:

yaf-demo
├── admin
│   ├── Bootstrap.php
│   ├── controllers
│   │   ├── Error.php
│   │   └── Index.php
│   ├── models
│   │   └── Sample.php
│   ├── plugins
│   │   └── Sample.php
│   ├── public
│   │   └── index.php
│   └── views
│       ├── error
│       │   └── error.phtml
│       └── index
│           └── index.phtml
├── conf
│   └── application.ini
├── library
│   └── readme.txt
├── mail
│   ├── Bootstrap.php
│   ├── controllers
│   │   ├── Error.php
│   │   └── Index.php
│   ├── models
│   │   └── Sample.php
│   ├── plugins
│   │   └── Sample.php
│   ├── public
│   │   └── index.php
│   └── views
│       ├── error
│       │   └── error.phtml
│       └── index
│           └── index.phtml
└── readme.txt
yunx-lee commented 2 years ago

现在基本开源类库都遵循psr规范,希望yaf支持下标准规范,不然引入类库后有文件是命名空间格式,有的不是,感觉很乱

其实一点都不乱,yaf 的controllers models plugins actions 目录下的类其实都是在根命名空间下的,也就是 \ 根据所调用类的类名判断,Model后缀去models下去,Plugin后缀去plugins下找,不比用到一个类就在顶部 use 一下中吗 而且 也是支持子目录的,比如 models/Table/User.php中有 class UserModel,他可以用 new Table/UserModel(); 请问这样你不爱?? 非要一堆use ?? 我接手的一个项目其中有一个文件光use就 60多行,这样你就爱??