【问题标题】:How to group multiple routes with the same controller method?如何使用相同的控制器方法对多条路由进行分组?
【发布时间】:2020-06-24 19:31:19
【问题描述】:

我的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条路线。

【问题讨论】:

  • 这里的问题很简单,我不明白为什么没有记录解决方案。
  • 如果你认为它应该被记录(更好或根本没有)没有什么能阻止你提交拉取请求:)

标签: laravel laravel-5.2


【解决方案1】:

我不知道你为什么说 RegEx 很丑。我基本上认为 RegEx 是最强大的工具之一。

在你的情况下,我认为下面的 sn-p 应该可以完成这项工作:

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

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

【讨论】:

  • 应该,@Alex。正如你的问题一样,你想要这个:Route::get(either 'test/foo' or 'test/bar' or 'test/baz', 'TestController@index');。所以,如果你想在这里匹配一个通配符,你需要在上面的 sn-p 之后在你的 route.php 中添加另一个条目。
  • 谢谢,我才意识到!
  • 嗨@haitran先生,我怎样才能从发布路线重定向到获取路线之一。我试图命名 get 路线,然后从 post 路线命名 return redirect()->route('foo');。但是我在 Lumen 中给出了“NotFoundHttpException HTTP 404 Not Found”错误。
猜你喜欢
  • 2017-11-08
  • 1970-01-01
  • 2016-09-07
  • 2018-09-10
  • 1970-01-01
  • 2012-09-21
  • 2019-03-11
  • 2017-04-15
  • 1970-01-01
相关资源
最近更新 更多