Laravel: 如何在 URL 中使用用户 id 以外的参数
Laravel: How to use a parameter other than user id in a URL
我正在创建一个 Laravel 网站,用户可以在其中登录和上传图片。为了让访问者看到该用户的图库,我设置了一个带有 URL 的图库页面,例如 https://localhost8000/gallery/2,其中 2 是用户 ID。
我当前的代码是这样的。
web.php
Route::get('/menu/{user}', 'CartController@menu');
CartController.php
public function menu($user)
{
$user = User::findOrFail($user);
return view('new_menu')->with(['user' => $user]);
}
我不想使用用户 ID 作为路由参数,而是想使用随机字符串。当前,当用户注册并存储在名为 random
.
的列中的 users
table 中时,将创建一个 32 位的随机字符串
我不知道如何在 web.php 和 Controller 中将“随机”与“用户”联系起来。
当使用 route model binding(您应该始终这样做)时,Laravel 会为您处理查找。例如:
public function menu(User $user)
{
return view('new_menu')->with(['user' => $user]);
}
无需查找,Laravel 会自动为您处理 404。
如评论中所述,您还可以specify the key用于查找模型实例:
Route::get('/menu/{user:random}', 'CartController@menu');
这假定 random
列有一个 UNIQUE
索引,否则结果可能无法预测。
首先,您的路线有问题。您说您希望用户访问“gallery/2”以获得用户 id=2 的图片库,对吗?但是您想要使用 32 个字符的字符串而不是 2 来查找用户。只需这样做:
Route::get('/gallery/{userString}', 'CartController@gallery');
public function gallery($userString)
{
$user = User::where('random',$userString)->first();
if($user == null)
// return some error about user not found
return view('new_menu')->with(['user' => $user]);
}
永远记住,在路由中传递什么作为参数并不重要,它可以是任何数字或字符串。它是关于你想在控制器中用它做什么。就像上面的代码一样,我们搜索具有与 $userString
匹配的 random
列的用户
首先,在您的用户迁移文件中添加以下字段:
'user_gallery_id' => Illuminate\Support\Str::random(32);
然后在你的 https:///localhost8000/gallery/2:
路径中
Route::get('/gallery/{user_gallery_id}', function($user_gallery_id) {
return User::where('user_gallery_id', $user_gallery_id)->with('gallery')->get();
});
我不知道你的控制器和型号。您可以编辑和自定义它。但这大致就是这个用例的工作流程。我现在只是关闭了它。您可以编辑和自定义它。但这大致就是这个用例的工作流程。我现在只是关闭了它。我假设 Gallery 和 User 已经相互关联。
在您的 blade 文件中,您可以访问图库:@dd($user->gallery)
你将不得不做一个路由模型绑定,你可以在模型中做这样的事情,你希望 URL 有其他数据,例如,如果你想要用户名而不是 id,在用户model 您将添加这行代码。
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'username';
}
请注意,您返回的任何值都必须是用户 table 中的现有值。
我正在创建一个 Laravel 网站,用户可以在其中登录和上传图片。为了让访问者看到该用户的图库,我设置了一个带有 URL 的图库页面,例如 https://localhost8000/gallery/2,其中 2 是用户 ID。
我当前的代码是这样的。
web.php
Route::get('/menu/{user}', 'CartController@menu');
CartController.php
public function menu($user)
{
$user = User::findOrFail($user);
return view('new_menu')->with(['user' => $user]);
}
我不想使用用户 ID 作为路由参数,而是想使用随机字符串。当前,当用户注册并存储在名为 random
.
users
table 中时,将创建一个 32 位的随机字符串
我不知道如何在 web.php 和 Controller 中将“随机”与“用户”联系起来。
当使用 route model binding(您应该始终这样做)时,Laravel 会为您处理查找。例如:
public function menu(User $user)
{
return view('new_menu')->with(['user' => $user]);
}
无需查找,Laravel 会自动为您处理 404。
如评论中所述,您还可以specify the key用于查找模型实例:
Route::get('/menu/{user:random}', 'CartController@menu');
这假定 random
列有一个 UNIQUE
索引,否则结果可能无法预测。
首先,您的路线有问题。您说您希望用户访问“gallery/2”以获得用户 id=2 的图片库,对吗?但是您想要使用 32 个字符的字符串而不是 2 来查找用户。只需这样做:
Route::get('/gallery/{userString}', 'CartController@gallery');
public function gallery($userString)
{
$user = User::where('random',$userString)->first();
if($user == null)
// return some error about user not found
return view('new_menu')->with(['user' => $user]);
}
永远记住,在路由中传递什么作为参数并不重要,它可以是任何数字或字符串。它是关于你想在控制器中用它做什么。就像上面的代码一样,我们搜索具有与 $userString
random
列的用户
首先,在您的用户迁移文件中添加以下字段:
'user_gallery_id' => Illuminate\Support\Str::random(32);
然后在你的 https:///localhost8000/gallery/2:
路径中Route::get('/gallery/{user_gallery_id}', function($user_gallery_id) {
return User::where('user_gallery_id', $user_gallery_id)->with('gallery')->get();
});
我不知道你的控制器和型号。您可以编辑和自定义它。但这大致就是这个用例的工作流程。我现在只是关闭了它。您可以编辑和自定义它。但这大致就是这个用例的工作流程。我现在只是关闭了它。我假设 Gallery 和 User 已经相互关联。
在您的 blade 文件中,您可以访问图库:@dd($user->gallery)
你将不得不做一个路由模型绑定,你可以在模型中做这样的事情,你希望 URL 有其他数据,例如,如果你想要用户名而不是 id,在用户model 您将添加这行代码。
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'username';
}
请注意,您返回的任何值都必须是用户 table 中的现有值。