我的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条路线。
答案 0 :(得分:12)
我不确定你为什么说RegExr很难看。我基本上认为它是最强大的工具之一。
对于您的情况,我认为以下代码段可以完成这项工作:
Route::get('user/{name}', function ($name) {
//
})
->where('name', '(foo|bar|baz)');
(foo|bar|baz)
RegExr将匹配以下任何字符串:'foo','bar','baz'。因此,如果您需要更多,只需添加垂直条并添加所需的字符串。