Laravel优先路由

时间:2014-10-05 08:15:28

标签: php laravel

我尝试为我的数据库中的每个用户而不是mysite.com/profile/1提供唯一的网址,例如:

mysite.com/my-cool-user --> usersController@show
mysite.com/my-other-user --> userController@show

但是如果它失败了(没有my-cool-user之类的东西),它会继续检查其他路线。

这可能吗?

2 个答案:

答案 0 :(得分:0)

是的,它会失败,而你可以使用路由参数。

Route::get('/{user-name}','userController@show');

然后在你的控制器方法中为方法添加一个参数。

public function userController($userName){

// find the user by new username

User::where('username',$userName)->first();

}

{user-name}可以是任何用户名,如果名称在数据库中匹配,您将获得用户个人资料。

在Laravel中,路由首先出现在Routes.php中的语句将首先处理低于该特定语句的其他语句。因此,如果您有两个相同的URL,则始终会使用第一个。

文档Routing Parameters

答案 1 :(得分:0)

我不知道如何完成它,但如果你只有一个基于数据库的路由,你可以创建这样的绑定规则:

Route::bind('username', function ($value, $route) {
    return User::where('name', $value)->first();
});

现在在所有路线的末尾创建以下路线

Route::get('/{username}', ['uses' => 'userController@show']);

并定义你的show函数:

public function test($username  = null) {

    var_dump($username);
}

在上面,如果$username为空或显示404页面,您可以重定向到主URL。但是,当您有许多基于数据库的路由时,它仍然无法解决问题,并且它们都具有相同的模式而没有任何前缀。

相关问题