问答 / 23 / 13 / 创建于 3年前 / 更新于 3年前
请问一下就是尝试搭建多模块后 怎么访问各自模块下的路由
RouteServiceProvider文件把自定义的模块路由加载上即可
RouteServiceProvider
nwidart/laravel-modules
App\Providers\RouteServiceProvider@map
注意看这三个文件,还是通过Provider使用Illuminate\Support\Facades\Route注册的路由
Provider
Illuminate\Support\Facades\Route
@Imuyu 我想的是比如输入http://localhost/blog这样 然后会解析Modules\Blog下的路由 大概是这么一个情况,就不想通过系统推荐的写法那么麻烦的转进来,有可行性吗
github.com/lizzj/japan 可以看一下这个用的modules
第一种方案:在AppServiceProvider使用自动加载,实现方法:在AppServiceProvider的register方法中追加一下代以下代码:
$list = File::directories(DIR . ‘/../../Modules’); foreach ($list as $path) { $dirName = basename($path); //注册默认启动项信息 $serClass = ‘\Modules\‘ . $dirName . ‘\Providers\AutoServiceProvider’; if (class_exists($serClass)) app()->register($serClass); }
其中Providers\AutoServiceProvider.php是你自定义的模块服务,你可以基于他实现注册自定义模版文件路经,路由,config配置,本地化语言,数据迁移等服务。当然你只须路由也可以直接把代码改成 require ‘\Modules\‘ . $dirName . ‘\route.php’; //加载路由即可!第二种方案就是通过url自动判断自动加载,在加载路由前解析,放那里都行代码如下:
/** * 解析模块的URL地址 [模块/控制器/操作?]参数1=值1&参数2=值2… * @access public * @param string $url URL地址 * @param string $depRoute URL分隔符 * @return void */ private function parseUrl($url, $depRoute = ‘/‘) { $url = trim($url, $depRoute); $url = str_replace($depRoute, '|', $url); list($path) = self::parseUrlPath($url); //解析路由mvc参数及附加参数 if (isset($path)) { // 解析模块 Request::offsetSet('route_module', !empty($path[0]) ? array_shift($path) : 'admin'); // 解析控制器 Request::offsetSet('route_controller', !empty($path[0]) ? array_shift($path) : 'index'); // 解析操作 Request::offsetSet('route_action', !empty($path[0]) ? array_shift($path) : 'index'); // 解析额外参数 self::parseUrlParams(empty($path) ? '' : implode('|', $path)); } }
这样就类式于tp的动态路由风格了mac。
后面你可以自定义模块路由引用route_module值加载,也可以自定义一条全局的动态路由即可,无须要模块中重新定义路由, 如动态加载当前模块路由:
require ‘\Modules\‘ . Request::input(‘route_module’) . ‘\route.php’; // 加载路由即可!
或者在web.php中写入一条全局路由:
Route::any('{url}', '\Modules\'.Request::input('route_module').'\'.Request::input('route_controller').'Controller@'.Request::input('route_action'));
我要举报该,理由是:
RouteServiceProvider文件把自定义的模块路由加载上即可Provider使用Illuminate\Support\Facades\Route注册的路由github.com/lizzj/japan 可以看一下这个用的modules
第一种方案:在AppServiceProvider使用自动加载,
实现方法:在AppServiceProvider的register方法中追加一下代以下代码:
其中Providers\AutoServiceProvider.php是你自定义的模块服务,你可以基于他实现注册自定义模版文件路经,路由,config配置,本地化语言,数据迁移等服务。
当然你只须路由也可以直接把代码改成
require ‘\Modules\‘ . $dirName . ‘\route.php’; //加载路由即可!
第二种方案就是通过url自动判断自动加载,在加载路由前解析,放那里都行
代码如下:
后面你可以自定义模块路由引用route_module值加载,也可以自定义一条全局的动态路由即可,无须要模块中重新定义路由,
如动态加载当前模块路由:
或者在web.php中写入一条全局路由: