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路线,参数数量不受限制的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何将某些路由参数限制为特定值?

Laravel 为特定路线设置最大上传大小限制?

我可以在 Laravel 4 中拥有可变数量的 URI 参数或键值对吗?

Laravel 4 中的角色特定登录

php laravel框架学习笔记 基本工作原理

Laravel 在身份验证异常时自动重定向