walkor / webman-framework

webman-framework
118 stars 61 forks source link

Update App.php #40

Closed ichynul closed 2 years ago

ichynul commented 2 years ago

从$controller_calss中获取app名时提取controller前面的路径为app名。


原写法对控制器的命名规则限制较大。当$controller_calsss是在vender中时,一般都会有个自己的命名空间在最前面。

Route::any('/admin/test/index', packgexxx\admin\controller\Test::class);

Route::any('/admin/test2/index', packgexxx\yyyy\admin\controller\Test2::class);

感觉从$controller_calss里面获取当前app不靠谱,如果类的命名空间不按套路的话。

Route::any('/admin/test3/index', packgexxx\Test3::class);

还是像parseControllerAction里面那样,根据当前请求路径判断好一些。

walkor commented 2 years ago

感谢pr 不过webman下app的含义是控制器所在app下的目录 例如 app\admin\v1\controller\Login::class 的app应该是admin,不应该是v1。 vendor下的文件不属于任何应用才对

ichynul commented 2 years ago

vendor下的文件不属于任何应用才对。 感觉这个限制太死板了。 看了一下源码。Route::load 会扫描 config/plugin/*** 里面的其他插件复制进去的route.php路由配置。 既然插件里面有route.php,那肯定也有对应的控制器处理类呀。 控制器不放vendor里,那只有两种办法。 1、插件安装的时候里面的控制器复制到根目录的/app/目录下,卸载时删除,多个插件会不有冲突? 2、在composer.json里面定义命名空间:

"autoload": {
    "psr-4": {
      "mypkg": "./src",
      "App\\": "./app"
    },
    "files": [
      "./support/helpers.php"
    ]
  },

感觉都有点麻烦,还是根据请求url路径判断比较好。 @walkor