【问题标题】:Laravel 5.0 masking routesLaravel 5.0 屏蔽路由
【发布时间】:2017-10-09 11:50:38
【问题描述】:

我是 Laravel 世界的新手(使用 5.0),我正在学习如何路由。 我有这条路线

Route::get('users/{id}', 'UserController@showProfile');

还有UserController

public function showProfile($id)
    {
         return view('user.profile', ['user' => User::findOrFail($id)]);
    }

一切正常,生成的 url 例如本地主机:8000/users/1。

可以屏蔽这条路线,而是使用类似 localhost:8000/users/profile 的东西,在后台进行查询? 谢谢大家

【问题讨论】:

  • 您应该为 a 用户和 the 用户使用单独的路由。我的意思是,路由 /user/profile 应该处理已登录的用户,而 /user/{id} 应该只处理由该 ID 指定的单个用户。
  • 谢谢你的回复,我明白你的意思了。我的问题是,即使对于已登录的用户,我也不希望他能够看到他的 id,我的意思是例如 users/2
  • 基本上该数字是用户的标识符..如果您希望使用配置文件来掩盖它,那么您必须将其作为查询字符串传递,但我想您不希望这样,因此您可以提交帖子请求用户/配置文件并指定所需的参数并在控制器中返回记录
  • @Daitarn 对,这很好;访问/user/profile 的登录用户将看到他的信息,而不是他的ID。如果您从不希望用户看到任何用户 ID,那么您将不得不在您的路线中使用不同的属性,例如 email 或 slug 或其他东西,只要它是独一无二。
  • 另外,如果您的登录用户的 ID 为 1,并且他们尝试访问 /user/1,您只需将他们重定向到 /user/profile.:if($id == Auth::user()->id) { return redirect("/user/profile"); }

标签: php laravel-5 routing controllers laravel-eloquent


【解决方案1】:

最简单的做法是简单地拉入经过身份验证的用户:

Route::get('users/profile', 'UserController@showProfile');



public function showProfile()
{
    return view('user.profile', ['user' => Auth::user()]);
}

【讨论】:

  • 是的,这就是我要找的
【解决方案2】:

您可以检查$id类型。

public function showProfile($id) {
    if(is_numeric($id)) {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    } else {
        // Profile page.
        return view('user.profile_page');
    }
}

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 2011-08-17
    • 2015-04-11
    • 1970-01-01
    • 2018-07-04
    • 2015-11-11
    • 2015-11-16
    • 2019-02-07
    相关资源
    最近更新 更多