概述
此前苦于寻找动态路由方法,后来放弃,觉得显式路由更好,特别是 PhpStorm/IDEA 中配合 Laravel Plugin,美滋滋。
当我们使用 Laravel 框架撸一个项目太久后,web.php
肯定写了不知多少行了
几百个路由也不方便维护、管理,所以我们得拆分,正好 5.3+ 对路由开放了 Provider
来试试我的方法:
-
创建
routesweb
目录,用来替代之前的web.php
。 -
将之前的
web.php
路由拆分成多个文件或多目录分放于routesweb
,然后删除web.php
文件。 -
创建助手函数文件
apphelpers.php
,添加如下方法:if (!function_exists('read_dir_queue')) { /** * 队列读目录内文件 * * @param string $dir 目录 * @param int $type 返回类型。0 返回文件名(无扩展名);1 返回完整文件名;2 返回带路径的完整文件名 * * @return array */ function read_dir_queue($dir, $type = 0) { $files = []; $queue = [$dir]; while ($path = current($queue)) { next($queue); if (is_dir($path) && $handle = opendir($path)) { while ($file = readdir($handle)) { if ($file === '.' || $file === '..' || $file === '.DS_Store') { continue; } $real_path = $path . '/' . $file; if (is_dir($real_path)) { $queue[] = $real_path; continue; } switch ($type) { case 1: if ($path == $dir) { $files[] = '/' . $file; } else { $files[] = substr($path, strripos($path, '/') + 1) . '/' . $file; } break; case 2: $files[] = $real_path; break; default: $files[] = current(explode('.', $file)); break; } } closedir($handle); } } return $files; } }
-
编辑
composer.json
文件autoload
下的psr-4
之后添加:"files": [ "app/helpers.php" ]
-
项目目录下执行一次
composer dumpautoload
,使 自动加载 生效。 -
编辑
app/Providers/RouteServiceProvider.php
文件内的mapWebRoutes
方法:protected function mapWebRoutes() { Route::group([ 'middleware' => 'web', 'namespace' => $this->namespace, ], function ($router) { foreach (read_dir_queue(base_path('routes/web'), 1) as $route) { require_once base_path('routes/web') . "/{$route}"; } }); }
Lumen 框架需编辑
bootstrap/app.php
文件,找到如下类似的地方修改一下即可:$app->router->group([ 'namespace' => 'AppHttpControllers', ], function ($router) { foreach (read_dir_queue(base_path('routes/api/v1'), 1) as $route) { require_once base_path('routes/api/v1') . "/{$route}"; } });
这样,就会遍历出 routes/web
下的所有路由文件并加载。
最后
以上就是迷路菠萝为你收集整理的Laravel 5.3+/Lumen 拆分路由,多目录、多文件方式拆分的全部内容,希望文章能够帮你解决Laravel 5.3+/Lumen 拆分路由,多目录、多文件方式拆分所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复