Я создал продукт сущности, и я не могу выдавать исключения, когда я хочу использовать функцию getProduct
или же deleteProduct
и продукт не существует в базе данных.
Мой код:
/**
* @Route("/product/{product}", name="get_product", methods={"GET"})
*/
public function getProduct(Product $product)
{
if(!$product){
throw $this->createNotFoundException('Product not found');
}
return JsonResponse::create(['id' => $product->getId(), "name" => $product->getName(), "price" => $product->getPrice(), "description" => $product->getDescription()]);
}
/**
* @Route("/product/{product}", name="delete_product", methods={"DELETE"})
*/
public function deleteProduct(Product $product)
{
if(!$product){
throw $this->createNotFoundException('Product not found');
}
$this->em->remove($product);
$this->em->flush();
return JsonResponse::create('deleted');
}
Тип намекает уже ожидаем Product
объект.
public function deleteProduct(Product $product)
{
// $product is never null
dump($product->getName());
Код выше такой же, как ниже
public function deleteProduct($productId)
{
$product = $this->getDoctrine()->getRepository(Product::class)
->find($productId);
// $product could be null
if(!$product){
throw $this->createNotFoundException('Product not found');
}
// $product is never null
dump($product->getName());
Потому что Symfony paramTransformer создает исключение NotFoundException, когда объект не соответствует. см. документ для более подробной информации
Других решений пока нет …