路径中间的可选参数

rap*_*2-h 11 php laravel laravel-5

有没有办法在路由中间添加可选参数?

示例路线:

/things/entities/
/things/1/entities/
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它不起作用:

get('things/{id?}/entities', 'MyController@doSomething');
Run Code Online (Sandbox Code Playgroud)

我知道我能做到这一点......

get('things/entities', 'MyController@doSomething');
get('things/{id}/entities', 'MyController@doSomething');
Run Code Online (Sandbox Code Playgroud)

...但我的问题是: 我可以在路线中间添加可选参数吗?

jed*_*ylo 7

不可以。可选参数需要放在路由的末尾,否则 Router 不知道如何将 URL 与路由匹配。您已经实施的是正确的做法:

get('things/entities', 'MyController@doSomething');
get('things/{id}/entities', 'MyController@doSomething');
Run Code Online (Sandbox Code Playgroud)

你可以尝试用一条路线来做:

get('things/{id}/entities', 'MyController@doSomething');
Run Code Online (Sandbox Code Playgroud)

并传递* 或 0如果你想为所有东西获取实体,但我称之为黑客。

还有一些其他的 hack 可以让您为此使用一种路线,但这会增加您的代码的复杂性,这真的不值得。