我的图片库应用程序上有四条路线。它们都是一样的:查询数据库并渲染图片。它们之间的唯一区别是记录的顺序。例如:
http://example.com/favorites : shows pics ordered by favorites
http://example.com/random : shows pics ordered by random
http://example.com/votes : shows pics ordered by votes
http://example.com/views : shows pics ordered by views
为此,我想在我的图库控制器中使用一个动作并将顺序作为参数传递。
我知道我可以创建这条路线:
Route::get('/{orderby}', 'GalleryController@showPics')
然后从控制器获取参数:
class GalleryController extends BaseController
{
public function showPics($orderby)
{
//query model ordering by $orderby and render the view
}
}
问题是我不想捕捉example.com/whatever,只有那四条特定路线。
是否有办法将参数传递给路径中的控制器操作。或者,或者,从控制器读取当前访问的路由?
答案 0 :(得分:13)
您可以在路线中添加参数约束,使用正则表达式限制可能的值,如下所示。
Route::get('/{orderby}', 'GalleryController@showPics')
->where('orderBy', 'favorite|random|vote|view');
如您所知,您将在映射的控制器操作中获取这些值:
public function showPics($orderby)
{
dd($orderby); // favorite, random, vote or view.
}
您可以在文档中详细了解参数路径约束:http://laravel.com/docs/routing#route-parameters