Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
chenliq opened this issue Mar 9, 2021 · 10 comments
Open

Comments

@chenliq
Copy link

chenliq commented Mar 9, 2021

举例
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
Copy link

Attax commented Mar 30, 2021

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

@tamia6
Copy link

tamia6 commented May 27, 2021

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

@chenliq
Copy link
Author

chenliq commented May 27, 2021

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

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

@tamia6
Copy link

tamia6 commented May 28, 2021

有同样的需求,最好是不需要 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
Copy link

Attax commented Jun 7, 2021

有同样的需求,最好是不需要 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
Copy link

infatu8 commented Jun 22, 2021

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

@fanqingxuan
Copy link

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

@lovelock
Copy link

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

@yunx-lee
Copy link

有同样的需求,最好是不需要 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
Copy link

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants