Laravel 8 的动态路由

Posted

技术标签:

【中文标题】Laravel 8 的动态路由【英文标题】:Dynamic routes with Laravel 8 【发布时间】:2021-03-31 01:46:48 【问题描述】:

我对 Laravel 中的路线有疑问。我正在开发 DMS(文档管理系统),我需要创建文件夹和无限的子文件夹。

这导致我挡住了制作成百上千条路线以实现目标的方式。

我需要制作完全动态的路线,如下例:

('/folders',[FolderController::class , 'index']) //to retrieve all folders
('/folders/x' , [FolderController::class , 'show']) // to retrieve level one sub-folder
('/folders/x/y' ,[FolderController::class , 'xyz'])  // to retrieve level two sub-folder

这导致我为每个子文件夹级别创建无限路径。

如何为动态子文件夹级别制作动态路由?

提前致谢。

【问题讨论】:

【参考方案1】:

不这样做,您最终会遇到很多路由和性能问题。而是只做一个带有可选参数的路由作为parent 文件夹。

'/folders/x?' , [FolderController::class , 'show']);

在您的数据库中,每个文件夹都应该有一个 id 和一个 parent id。 当parent id 为空时,这意味着它是一个根文件夹。 然后可以递归获取所有子/父文件夹

【讨论】:

【参考方案2】:

您可以使用通配符参数:

Route::get('/folders/x' , [FolderController::class , 'show'])
    ->where('x', '.*');

那么您的控制器路由将是:

public function show($x = '') 
     $path = explode('/', $x);
     // $path is an array with the directory structure
     // Do whatever you want with it e.g.
     if (empty($path)) 
         return $this->index();
      

【讨论】:

感谢您的回复和帮助,非常感谢。

以上是关于Laravel 8 的动态路由的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 路由动态路由控制器到刀片模板

带有动态前缀的 Laravel 动态路由

有没有办法在 Laravel 4 中混合静态路由和动态路由?

用于搜索的Laravel动态路由

laravel 主域路由优先于动态子域

Laravel 带接口的动态路由