Всем привет. Я новичок в PHP, ООП, фреймворках. Уже могу делать что-то простенькое, но продолжаю изучать сам язык, паттерны и фреймворки соответственно. Решил погрузиться в Симфони, в целом мне всё нравится, я могу делать примитивные вещи. Но возникла проблема с Роутингом, прошу помощи в решении и, по возможности, объяснении "что и как":
Есть класс:
class ProductController extends AbstractController
{
/**
* @Route("/product/{id}", name="product")
*/
public function show($id,ProductRepository $productRepository)
{
//это я тут уже извращался как мог с условием
if (!$productRepository->findOneBy(['id' => $id]) && !(int)$id ) {
throw new NotFoundHttpException('The product does not exist');
}
return $this->render('product/product/index.html.twig',
['product' => $productRepository->findOneBy(['id' => $id])]
);
}
}
Выводит товары по id, перейдя по адресу: "site.ru/product/3"
Если такой id есть - все ок, он выведет этот товар. Если нет - все ок, можем отдать ошибку, мол такой страницы нет. В чем проблема: если мы перейдем по адресу, который начинается с id существующего товара и потом добавим еще любые символы, то он все равно найдет товар по id с которого начался адрес. Пример: "site.ru/product/3askdjhaksj" - отдаст нам страницу с товаром под id 3. Если мы введем "site.ru/product/3123123" то он, конечно же, ничего не отдаст.
Пробовал так, не помогло:
public function show(int $id, ProductRepository $productRepository)
//или
public function show(string $id,ProductRepository $productRepository)
Как это победить?
Спасибо!