如何使用相同的控制器方法对多个路由进行分组?

时间:2016-08-11 03:07:48

标签: laravel laravel-5.2

我的routes.php中有以下内容:

Route::get('test/foo', 'TestController@index');

Route::get('test/bar', 'TestController@index');

Route::get('test/baz', 'TestController@index');

我试图将其减少到以下内容:

Route::get(either 'test/foo' or 'test/bar' or 'test/baz', 'TestController@index');

此处适用的一个documented approach是对路径施加正则表达式约束:

Route::get('test/{uri}','TestController@index')->where('uri', 'regex for foo, bar, and baz...');

然而,这个解决方案会很难看。难道没有一种优雅的方式来表达

{uri} in foo,bar,baz
用Laravel的语言写的?否则,正则表达式会是什么样的?

谢谢!

P.S。我已阅读this,但它并不适用于我的案例有3条路线。

1 个答案:

答案 0 :(得分:12)

我不确定你为什么说RegExr很难看。我基本上认为它是最强大的工具之一。

对于您的情况,我认为以下代码段可以完成这项工作:

Route::get('user/{name}', function ($name) { // }) ->where('name', '(foo|bar|baz)');

(foo|bar|baz) RegExr将匹配以下任何字符串:'foo','bar','baz'。因此,如果您需要更多,只需添加垂直条并添加所需的字符串。