#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);
}