@nohup

Проблема с роутом в контроллере. Баг?

Всем привет. Я новичок в 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)


Как это победить?

Спасибо!
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы