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

1619443919

用的多应用 ,目的是只要少量几个大点的应用
然后再这几个大点的应用里,再细分子应用, 我用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目录里面直接全部是类文件了 看着脑壳都发晕

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

7097 3 0
3个回答

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

老大,谢谢你,你的这个方案 我加道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目录按照自己的规则加路由就好了。

  • 1619443919 2021-03-17

    老大,能不能帮我大概实现下 我一直在线问答看 是否有人问类似的问题 一直找不到答案

  • walkor 2021-03-17

    因为没人像你路由规则这么复杂,你这么复杂反而更不好维护,找个控制器要找几个文件。除了乱,没看出来有什么优势。

  • 1619443919 2021-03-17

    好吧 老难为你 我也不好意思 我老实用内置的吧 我就是怕类文件太多 我想找个地方改 难找一点 如果用文件夹命名 清晰点

  • walkor 2021-03-17

    按照你这个做法,感觉没有减少类文件,反而增多了类文件,还有目录。

  • 1619443919 2021-03-17

    谢谢你的耐心指导 由你们大家的支持 相信webman也会越来越好 现在国内有开源的webman的cms项目么 想看看学习下

  • 1619443919 2021-03-17

    我在gitee和github翻了 大家都是直接搬了原版的webman上去 没有开发好的项目 现在我自己做项目起来 感觉好吃力啊 遇到问题 我老问答里来问你 我也怕你烦人

  • walkor 2021-03-17

    webman刚出没多久,应该还没人开源出基于webman的cms

  • 你好啊 2021-03-18

    @1619443919:https://gitee.com/zikafei/warehouse 这里有一个差不多的基于webman的项目,你可以参考一下

  • artisan 2022-05-08

    前后台两个“大的应用”做成两个独立的项目,app内一级目录形式再各自创建“大的应用”内部的子应用

年代过于久远,无法发表回答
×
🔝