Laravel 3.x 路由问题 - 使用通配符获取错误的参数值

Posted

技术标签:

【中文标题】Laravel 3.x 路由问题 - 使用通配符获取错误的参数值【英文标题】:Laravel 3.x Routes issue - Getting wrong param value using wildcard 【发布时间】:2013-05-23 20:28:34 【问题描述】:

我正在尝试在我的 Routes 文件中使用一些通配符,因为它变得过于臃肿。假设我有一张照片和一条画廊路线,我决定将它们定位在“媒体”“子路线”下:

Route::get('admin/media/(:any)/edit/(:num)', function($p) 
    dd($p);
);

模具和转储通过访问“http://www.bossplaya.dev/admin/media/galleries/edit/1”而不是“1”给了我“画廊”,正如预期的那样。

但是有效:

Route::get('admin/media/galleries/edit/(:num)', function($p) 
    dd($p); // Returns "1"
);

有没有办法像这样使用通配符?这将节省我大量的时间,并使我的路线文件更干净。

有什么想法吗?

【问题讨论】:

【参考方案1】:

您添加到 URL 的每个通配符都将成为您的路由中的一个参数,因此在此示例中,您会发现 $type 变为“画廊”,$id 变为“1”...

Route::get('admin/media/(:any)/edit/(:num)', function($type, $id) 
    dd(compact('type', 'id'));
);

如果有任何原因您不想知道(:any) 是什么,那么您可以使用不匹配的正则表达式,例如:

Route::get('admin/media/[^/]+/edit/(:num)', function($id) 
    dd(compact('id'));
);

【讨论】:

以上是关于Laravel 3.x 路由问题 - 使用通配符获取错误的参数值的主要内容,如果未能解决你的问题,请参考以下文章

带有通配符的 Laravel 路由总是 404

在 laravel 5 中通配符到错误控制器的路由

Laravel 5.6 通配符路由在域中未按预期运行

Laravel 5.1 通配符路由

Laravel,路由通配符过滤然后控制器

Laravel 4 通配符路由到不同的控制器