如何在 Laravel 4 中为 Route::group 设置正则表达式参数约束?

Posted

技术标签:

【中文标题】如何在 Laravel 4 中为 Route::group 设置正则表达式参数约束?【英文标题】:How to set regular expression parameter constraints for Route::group in Laravel 4? 【发布时间】:2015-03-08 14:50:24 【问题描述】:

对于简单的路线,我知道我可以使用where 声明。但是 Route::group() 前缀中的参数呢

<?php

Route::get('user/id', 'UserController@profile')->where('id', '[0-9]+');

Route::group(['prefix' => 'foo/bar'], function() 
    // ...
)->where('bar', '[0-9a-Z]+'); // this won't work

【问题讨论】:

【参考方案1】:

我正在使用 laravel 5.5。我遇到了同样的问题,在搜索中找到了这个问题。 我尝试使用@lukasgeiter 定义的解决方案并遇到问题: 的价值 $group-&gt;getRoutes() 不仅是当前组的路线。 但是我通过在路由组定义中指定条件来解决我的问题。

Route::group([
        'prefix' => 'foo/bar',
        'where'  => ['bar' => '[0-9a-Z]+']
    ],
    function() 

    // ...

);

它对我有用:)

【讨论】:

这是您希望使用 Laravel 5/6 执行此操作的正确方法 - 确认它按说明工作。【参考方案2】:

在我看来,一个可能不完美的解决方案是

// Route Model Binding
Route::model('user', 'User');

// Route Constraint Pattern
Route::pattern('user', '[0-9]+');

// Route Definition
Route::get('anything/user', 'UserController@anyFunction');
.
.
Route::resource('user', 'UsersController');

【讨论】:

【参考方案3】:

开箱即用的 laravel 路由器不支持此功能。您可以使用 Jason Lewis 的 Enhanced Router 软件包或 fork that enables support for Laravel 4.2

您也可以自己动手。您基本上可以将 where 条件添加到组内的每个路由:

Route::group(['prefix' => 'foo/bar'], function() 
    Route::get('/', function()
        // ...
    )->where('bar', '[0-9a-Z]+');
);

或者让它更动态一点,并将其添加到你的路由组的底部:

Route::group(['prefix' => 'foo/bar'], function($group) 
    // ...

    foreach($group->getRoutes() as $route)
        $route->where('bar', '[0-9a-Z]+');
    
);

【讨论】:

以上是关于如何在 Laravel 4 中为 Route::group 设置正则表达式参数约束?的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 4 中为表单设置提交按钮样式

在 Laravel 4.2 中为每个公司创建目录(命名为 Today Date)并编写日志文件(命名为 CompanyName)

如何在 laravel 中为开发和生产使用不同的 cors 配置

如何在 Laravel 5 中为表使用全局前缀

如何在 Laravel 中为 REST API 创建身份验证

如何在 Laravel 中为嵌套关系设计表?