Laravel 4路线,参数数量不受限制
Posted
技术标签:
【中文标题】Laravel 4路线,参数数量不受限制【英文标题】:Laravel 4 route with unlimited number of parameters 【发布时间】:2014-02-26 15:54:21 【问题描述】:我正在尝试为无限数量的 URL 级别创建动态路由。
这是我目前的路线
Route::get('pageLink', array('uses' => 'SiteController@getPage'));
这适用于第一级。所以像 something.com/foo/ 这样的 URL 可以工作。但是,如果我有类似 something.com/foo/bar/ 的东西,它就不会捕获那个 URL。我需要它来匹配无限级别。这样,在我的控制器中,无论整个链接是什么,它都会给我一个变量。
我知道我能做到
Route::get('pageLink', array('uses' => 'SiteController@getPage'));
Route::get('pageLink/pageLink2', array('uses' => 'SiteController@getPage'));
Route::get('pageLink/pageLink2/pageLink3', array('uses' => 'SiteController@getPage'));
但这似乎有点矫枉过正。有没有更好的方法来做到这一点,让它匹配到 URL 的末尾?
谢谢。
【问题讨论】:
【参考方案1】:@Fusion https://laravel.com/docs/5.4/routing
您可以使用路由实例上的 where 方法来限制路由参数的格式。 where
方法接受参数的名称和定义如何约束参数的正则表达式。所以id
是一个路由参数,->where('id', '[0-9]+')
是这个参数的正则表达式。如果您需要使用多个参数,您可以执行以下操作:
Route::get('user/id/id2', function ($id) )->where('id', '[0-9]+')->where('id2', '[[0-9]+]');
Route::get('user/id', function ($id)
)->where('id', '[0-9]+');
【讨论】:
添加 cmets 并解释你的答案。 您可以使用路由实例上的 where 方法来限制路由参数的格式。 where 方法接受参数的名称和定义如何约束参数的正则表达式。所以 id 是一个路由参数, ->where('id', '[0-9]+') 是这个参数的正则表达式。如果您需要使用多个参数,您可以执行以下操作:Route::get('user/id/id2', function ($id) )->where('id', '[ 0-9]+')->where('id2', '[[0-9]+]');【参考方案2】:你可以试试这样的:
//routes.php
Route::get('pageLink/otherLinks?', 'SiteController@getPage')->where('otherLinks', '(.*)');
请记住将上述内容放在 routes.php 文件的最后(底部),因为它就像一条“包罗万象”的路线,因此您必须首先定义所有“更具体”的路线。
//controller
class SiteController extends BaseController
public function getPage($pageLink, $otherLinks = null)
if($otherLinks)
$otherLinks = explode('/', $otherLinks);
//do stuff
这种方法应该让您使用无限数量的参数,所以这就是您似乎需要的。
【讨论】:
究竟是什么?在 中是什么意思? 这意味着它是可选的@Riki137 不错的方法,即使对 Laravel 5 也有效。你能解释一下 where('otherLinks', '(.*)') 是如何工作的吗?以上是关于Laravel 4路线,参数数量不受限制的主要内容,如果未能解决你的问题,请参考以下文章