我尝试为我的数据库中的每个用户而不是mysite.com/profile/1
提供唯一的网址,例如:
mysite.com/my-cool-user --> usersController@show
mysite.com/my-other-user --> userController@show
但是如果它失败了(没有my-cool-user
之类的东西),它会继续检查其他路线。
这可能吗?
答案 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,则始终会使用第一个。
答案 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。但是,当您有许多基于数据库的路由时,它仍然无法解决问题,并且它们都具有相同的模式而没有任何前缀。