laravel搭建多模块后访问多模块底下的路由问题

laravel搭建多模块后访问多模块底下的路由问题
请问一下就是尝试搭建多模块后 怎么访问各自模块下的路由

laravel搭建多模块后访问多模块底下的路由问题

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 13

RouteServiceProvider文件把自定义的模块路由加载上即可

2年前 评论
ta_ta (楼主) 2年前
Imuyu (作者) 2年前
ta_ta (楼主) 2年前
xini2603 2年前
xini2603 2年前

file 注意看这三个文件,还是通过Provider使用Illuminate\Support\Facades\Route注册的路由

2年前 评论
Imuyu (作者) 2年前
ta_ta (楼主) 2年前
ta_ta (楼主) 2年前

github.com/lizzj/japan 可以看一下这个用的modules

2年前 评论

第一种方案:在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'));
2年前 评论
ta_ta (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!