com / jenssegers / optimus id混淆。 它可以正常工作,但是在政策中,当我实施它时效果不佳。
如果我删除该政策,则可以正常运行。 我的产品政策
public function view(User $user, Product $product)
{
return true;
}
我的ProductController
public function show(Product $product, Request $request)
{
return response()->json([
'product' => $this->product->where('id', $request->id)->relTable()->first()
]);
}
我的猜测是laravel会自动搜索不是真实ID的ID,并且也没有记录。然后,它将给出错误No query results for model App\Model\Product
。有办法防止这种情况吗?
PS:如果我使用真实的ID,它就可以正常工作...
答案 0 :(得分:0)
由于您使用的是Route Model Binding,因此Laravel将搜索带有键的产品,并将该模型实例传递给控制器的show
方法。如果您不希望这样做,则可以将show
方法更改为如下形式:
public function show(Request $request, $id)
{
// Your code
}
答案 1 :(得分:0)
将此添加到模型中,以便laravel手动解析ID。
//Id obfuscation should be resolveManually
public function resolveRouteBinding($value)
{
return $this->where('id', $this->optimus()->encode($value) )->first() ?? abort(404);
}