web多应用,这种规划目录结构貌似不行?

0

用的多应用 ,目的是只要少量几个大点的应用
然后再这几个大点的应用里,再细分子应用, 我用webman试了貌似是不行


规划后台
app/web/controller/sysmanage/index.php
app/web/controller/financialmanage/index.php
http://xxx/web/sysmanage/
http://xxx/web/financial/


规划前台
app/mobile/controller/wechat/index.php
app/mobile/controller/pcwebsite/index.php


http://xxx/mobile/wechat/
http://xxx/mobile/pcwebsite/


这样都不行, 直接404
直接搞个sysmanage.php 和 financialmanage.php文件可以
但是这样感觉是很不方便 ,我想更细化的目录更能方便后期维护, 直接用类文件,项目大的话,后期web目录里面直接全部是类文件了 看着脑壳都发晕


目前是只能用多应用,搞一堆一级子应用来解决。咋能实现我想要的那种嘞?

已邀请:

walkor

赞同来自:

最简单的方案是给每个url设置路由。
config/route.php 里加类似如下代码


$app_iterator = new \RecursiveDirectoryIterator(app_path());
$iterator = new \RecursiveIteratorIterator($app_iterator);
foreach ($iterator as $file) {
if (is_dir($file) || $file->getBasename() != 'index.php' || strpos($file, 'model') || strpos($file, 'view')) {
continue;
}
$path = substr($file, strlen(BASE_PATH), -4);
$class = str_replace('/', '\\', $path);
$route_path = str_replace('/controller', '', substr($path, 4, -6));
$action = 'index';
echo "$route_path=>$class->$action\n";
if (class_exists($class)) {
Route::any($route_path, [$class, $action]);
}
}

以上代码的意思是将扫描app下的所有controller,根据文件路径计算路由路径和对应的类,然后通过路由将二者绑定。
你试下,如果代码哪里不对自己调整下。

1619443919 - 90it

赞同来自:

老大,谢谢你,你的这个方案 我加道route.php 解决了访问问题了


app/web/controller/sysmanage/index.php
http://xxx/web/sysmanage ok的
但是http://xxx/web/sysmanage/index 还是404
然后在sysmanage路径下的index.php 加方法 比如:userlist方法
http://xxx/web/sysmanage/userlist 404
试着直接写个app/web/controller/sysmanage/userlist.php类
http://xxx/web/sysmanage/userlist 404
但是 创建个userlist文件夹 再写个index.php
http://xxx/web/sysmanage/uselist ok的


研究了您给的代码 没搞明白咋改才能符合我的要求


继续翻文档看到有这个
http://127.0.0.1:8787/foo/test 将默认访问app\controller\Foo类的test方法
http://127.0.0.1:8787/admin/foo/test 将默认访问app\admin\controller\Foo类的test方法


就想咱们webman内部能不能实现下


http://127.0.0.1:8787/foo/test 将默认访问app\controller\Foo类的test方法
如果不存在app\admin\controller\Foo类 ,就找foo文件夹的index.php 的 test方法
如果app\admin\controller\Foo文件夹里面index.php不存在,就找foo文件夹下的test类的index方法
还不存在 直接404
再比如
http://127.0.0.1:8787/admin/foo/test 将默认访问app\admin\controller\Foo类的test方法
如果app\admin\controller\foo类不存在,就找app\admin\controller\Foo文件夹里的index.php的test方法
如果app\admin\controller\foo文件夹不存在index.php,就找app\admin\controller\Foo文件夹里的test类的index方法
还不存在 直接404
搞他个4-5个约定顺序轮番找, 找到即可


可以的话,开发者可以自定义这个查找方式和顺序 因为每个人都有一个想法


搞个啥通用的东西 让我们约定一下 开发,哈哈 老大 很喜欢webman,想用webman开发了 ,就是开发老遇到问题

walkor

赞同来自:

你也说了,每个人可能都有自己的规则。任何项目都没办法满足所有人的路由规则的。
现在webman默认路由规则见 https://www.workerman.net/doc/webman#/route 。 这个规则已经是最通用的规则了。


如果你有自己的路由规则,参考我上面给的代码扫描app目录按照自己的规则加路由就好了。

要回复问题请先登录注册