Запутывание идентификатора политики Laravel

#laravel

#laravel

Вопрос:

запутывание идентификатора com / jenssegers / optimus. Это работает нормально, но в политике это не работает должным образом, когда я ее внедряю.

Если я удалю политику, она будет работать нормально. Моя политика продукта

   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 автоматически выполняет поиск идентификатора, который не является реальным, и в нем нет записи. Тогда это выдаст ошибку No query results for model AppModelProduct . Есть ли способ предотвратить это?

PS: Если бы я использовал реальный идентификатор, он работал бы нормально…

введите описание изображения здесь

Ответ №1:

Поскольку вы используете привязку модели маршрута, Laravel выполнит поиск продукта с ключом и передаст этот экземпляр модели show методу вашего контроллера. Если вы этого не хотите, измените show метод на что-то вроде этого:

 public function show(Request $request, $id)
{
    // Your code
}
  

Ответ №2:

Добавьте это в свою модель, чтобы laravel вручную разрешал идентификатор.

  //Id obfuscation should be resolveManually
    public function resolveRouteBinding($value)
    {
       return $this->where('id', $this->optimus()->encode($value) )->first() ?? abort(404);
    }