Php 拉维优先路由
我试图为数据库中的每个用户提供一个唯一的URL,而不是mysite.com/profile/1,例如:Php 拉维优先路由,php,laravel,Php,Laravel,我试图为数据库中的每个用户提供一个唯一的URL,而不是mysite.com/profile/1,例如: mysite.com/my-cool-user --> usersController@show mysite.com/my-other-user --> userController@show 但是,如果它没有像我的酷用户那样成功,它将继续检查其他路径 这可能吗?是的,它将失败,您可以使用路由参数 Route::get('/{user-name}','userControlle
mysite.com/my-cool-user --> usersController@show
mysite.com/my-other-user --> userController@show
但是,如果它没有像我的酷用户那样成功,它将继续检查其他路径
这可能吗?是的,它将失败,您可以使用路由参数
Route::get('/{user-name}','userController@show');
然后在控制器方法中向该方法添加一个参数
public function userController($userName){
// find the user by new username
User::where('username',$userName)->first();
}
{user name}可以是任何用户名,如果数据库中的名称匹配,您将获得用户配置文件
在Laravel for routing中,Routes.php中首先出现的语句将在该特定语句下面的其他语句之前进行处理。因此,如果您有两个相同的URL,那么将始终使用第一个URL
文档。我不知道如何才能完全使用它,但如果您只有一条基于数据库的路由,则可以创建这样的绑定规则:
Route::bind('username', function ($value, $route) {
return User::where('name', $value)->first();
});
现在,在所有管线的末端创建以下管线:
并定义您的显示功能:
public function test($username = null) {
var_dump($username);
}
在上面,若$username为null或显示404页面,则可以重定向到主url。但是,当您有许多基于数据库的路由,并且所有路由都具有相同的模式且没有任何前缀时,它仍然无法解决问题。但是如果我将该规则放在第一位,这难道不会使我拥有的所有其他规则都无用吗?例如,我有一个关于页面的静态路由…明白了!刚刚放置了'Route::get'/{username}','userController@show';' 在routes.php的末尾,它可以工作;-谢谢是的,它将从数据库中查找关于页面用户的信息,如果它存在,它将为您获取一个用户,如果不存在,它将失败。您可以将此路线放置在其他路线的下方。
public function test($username = null) {
var_dump($username);
}