Laravel - 使用RESTful控制器时从地址栏中删除模型ID

时间:2017-01-22 23:09:37

标签: php laravel rest

在查看或编辑模型的详细信息时,是否有任何帮助函数不允许我们在地址栏中查看模型的ID?

E.g。如果我尝试使用id 1编辑用户的详细信息,则浏览器中的地址会显示: myapp.dev/users/1/edit

我宁愿它显示为myapp.dev/users/edit

知道如何解决这个问题吗?

4 个答案:

答案 0 :(得分:1)

我认为可以做出正常的"路线:

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

和控制器中的方法:

public function edit(){
    $user = Auth::user();
    return view('users.edit',['user' => $user]);
}

当您的控制器中有$user时,您还可以使用关系找到属于他的其他模型。但是,我也同意这不是最好的主意。最好在路径中提供id user

实际上,您需要在每条路线中登录用户。所以你的路线也应该使用auth中间件:

Route::get('users/edit', 'UserController@edit')->middleware('auth');

答案 1 :(得分:1)

只需使用POST

<form action="{{ route('user.edit', $user->id) }}" method="POST">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <button type="submit" class="btn ">Edit
</form>

您需要在路线中进行一些修改

Route::post('users/{id}/edit', 'UserController@edit');

答案 2 :(得分:0)

我不认为有辅助功能可以做到这一点。

如果您只想从网址中删除ID,可以使用HTML5。有这个功能,你可以change the URL without reloading the page

window.history.pushState(“object or string”, “Title”, “/new-url”);

但也许这不是您想要的。也许您只是不希望用户更改该ID以访问其他用户帐户。所以你可以使用名为Authorization的东西。这允许您阻止用户做一些他们不允许的事情。

答案 3 :(得分:0)

我建议你使用Laravel Hashids,这里是installation steps。安装后添加服务提供商并执行供应商发布

在生成URL之前,只需编码id,如

$encoded = Hashids::encode($id);

然后,您的网址将是

http://mywebsite.com/users/e3423gsf562/edit

此处,URL中的长度和字母数字字符串可在config / hashids.php文件下配置

然后在你的控制器内,你可以解码它们并使用它。

$id = collect(Hashids::decode($id))->first();