在Laravel中,如果我有两条或更多条路线,如:
Route::get('/{username}', 'UsersController');
Route::get('/{album}', 'AlbumsController');
并且用户请求了www.example.com/foo
这样的页面,那么Laravel将如何确定用户是否选择了用户个人资料或相册的页面。
答案 0 :(得分:5)
它不会 - Laravel不可能知道哪个 - 所以你不能这样做。
您需要制作路线
Route::get('/user/{username}', 'UsersController');
Route::get('/album/{album}', 'AlbumsController');
可能执行此操作的唯一方法是,如果没有用户名匹配foo
- 您可以尝试使用名为foo
的相册 - 但是遇到其他问题 - 比如用户名和专辑有相同的名称......
答案 1 :(得分:0)
它可以做你想做的事,但这是非常糟糕的做法。几个月后查看代码后,会让用户和自己感到困惑。
#btw, this is in laravel 5
Route::any('foo', function($verb)
{
switch($verb)
{
case 'album':
return view('somepage');
case 'user':
return view('some_user');
default:
return view('randompage');
}
});
我可能做错了代码,但没有经过测试就完成了。但你明白了。
编辑:刚刚测试过,不可能。除了一个坏主意。答案 2 :(得分:0)
为什么不直接构建网址的目的?资源名称和标识符(即albums/{album_id}
)。
如果用户创建与用户同名的相册会怎样?您的应用程序如何区分这两者?如果添加其他对象类型(如事件),该怎么办?假设应用程序中的每个对象都具有非冲突的名称是不可能的。
停止尝试违反规定,只按照惯例构建您的网址。它可以为你节省很多开发中的麻烦。