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 中的现有值。