Laravel路线变量

时间:2015-02-14 02:57:30

标签: php laravel laravel-4

在Laravel中,如果我有两条或更多条路线,如:

Route::get('/{username}', 'UsersController');
Route::get('/{album}', 'AlbumsController');

并且用户请求了www.example.com/foo这样的页面,那么Laravel将如何确定用户是否选择了用户个人资料或相册的页面。

3 个答案:

答案 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})。

如果用户创建与用户同名的相册会怎样?您的应用程序如何区分这两者?如果添加其他对象类型(如事件),该怎么办?假设应用程序中的每个对象都具有非冲突的名称是不可能的。

停止尝试违反规定,只按照惯例构建您的网址。它可以为你节省很多开发中的麻烦。