我想通过它的 id 编辑一条记录,并且我的视图中有以下代码:
<a href="{{route('guest.edit',$g->id)}}" class="btn btn-simple btn-warning btn-icon edit"><i class="ti-pencil-alt"></i></a>
所以我有我的路线:
Route::resource('guest','GuestController');
然后在我的控制器中:
public function edit($id){
$guest=Guest::find($id);
return view('Guests.edit1',compact('guest'));
}
这样做的问题是id出现在我的路线中,我认为不安全,它以这种方式出现
http://localhost:8081/guest/2/edit
如何解决 id 不显示在 url 中,或者 url 根本不显示
一个可能的解决方案是使用Encryption来显示您的加密参数。从这个角度来看,我会使用
encrypt
fromblade
然后在控制器中解密这个值。
不要忘记
use Illuminate\Support\Facades\Crypt;
我找到了使用
FakeID
.隐藏模型的所有 id,只需放置命名空间和trait,它就会隐藏你的 id 并生成一个非常干净的 URL,例如,如果你有这样的东西:
我会把它改成这样:
您不必担心加密或解密,它会自动完成所有操作。
你也可以尝试使用友好的 url,你有一个更清晰的 url,并且你设法隐藏了 id。
我使用这个包https://github.com/cviebrock/eloquent-sluggable它允许您以简单的方式生成友好的 url。
在路线上使用别名尝试这样:
或者也可以使用这个 laravel 助手:
我知道现在有点晚了,但我刚刚找到了一个可能的解决方案。
php artisan make:policy NombrePolicy -m nombreModelo
。转到应用程序-> HTTP-> 策略。现在这里有两种我看的方式......
$urlUserBase=request()->url();
。然后我得到编辑路线,但从当前用户那里$urlUserActual=route('usuario.edit',['usuario'=>$user->id]);
得到比较,如果它们return $urlUserActual === $urlUserBase;
在你的控制器中是相同的,你写//Verifica el policy User@update $this->authorize('función',$varConArrayUsuario);
结果是这样的:
另一个你可以在这里查看