带有可选子路径的 Laravel 路由
Posted
技术标签:
【中文标题】带有可选子路径的 Laravel 路由【英文标题】:Laravel routes with an optional sub-path 【发布时间】:2016-04-10 15:21:14 【问题描述】:我正在尝试在routes.php
中创建一个可以处理可选无限子路径的路由。
Route::get('/path/url', function($url)
echo $url;
);
网址可以是以下:
/path/part1
/path/part1/part2
/path/part1/part2/part3
etc.
但是由于 url 中的 /
与子路径不匹配,所以什么也没有发生。 (当然,echo $url
仅用于测试)。
我现在使用一个技巧来避免这种情况,通过使用 ~
而不是 /
作为子路径,然后替换它们,但我想知道是否有更好的方法,所以我可以使用 @987654329网址中的@。
更新
找到解决方案,感谢 Mark:
Route::get('/path/all', function($url)
echo $url;
)->where('all', '.*');
【问题讨论】:
***.com/questions/13297278/… 可能会回答您的问题。 (:any) 似乎不再在 Laravel 5 中工作了? any 和 all 确实有效,但似乎与子路径不匹配......any
和 all
没有什么特别之处,因为它们只是普通的路由参数。
【参考方案1】:
url
必须有一个extent,您想为其定义路由。我想子路由的数量是/必须预定义的,比如说你想使用4
url 部分。
如果是这样,那么使用 可选参数 将是最好的选择:
Route::get('path/url1?/url2?/url3?/url4?',
function($url1 = null, $url2 = null, $url3 = null, $url4 = null)
//check if sub-routes are defined and combine them to produce the desired url
);
注意:
(:any)
似乎不再支持 @Mark Davidson 在 SO 答案中所建议的参数(我无法在 laravel 5.0 中重现它)。
同时,您还可以使用正则表达式来达到预期的效果,如下所示(可能与您自己的方法非常相似):
Route::get('/url', function ($url)
// other url parts can be extracted from $url
)->where('url', '.*');
但是使用第二种方法的唯一缺点是您可能不知道应该嵌套到什么程度来提取 url 子部分。
不过,使用前一种方法,您知道范围。
【讨论】:
以上是关于带有可选子路径的 Laravel 路由的主要内容,如果未能解决你的问题,请参考以下文章