Ошибка Twig при генерации слага, отсутствуют параметры («слаг») для генерации URL - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу отобразить страницу продукта Twig и ее URL-слаг. Мой контроллер:

* @Route("/item/{id}", name="app_showitem_getid", requirements={"id": "\d+"})
* @param int $id
* @return Response
* @throws \Doctrine\ORM\NonUniqueResultException
public function getid(int $id):Response

{
    $repository = $this->getDoctrine()->getRepository(Item::class);
    $item = $repository->findBy($id);

    return $this->render("item/prodpage.html.twig", ["items"=>$item]);
}

и

* @Route("/item/{slug}", name="app_showslug_getslug")
* @return Response
* @throws \Doctrine\ORM\NonUniqueResultException
public function getslug(string $slug)

{
    $em = $this->getDoctrine()->getManager();

    $repository = $em->getRepository(Item::class);

    $itemSlug = $repository->findBy(["slug"=>$slug]);

    $this->generateUrl('app_showslug_getslug', [array("slug"=> array($itemSlug))],UrlGeneratorInterface::ABSOLUTE_URL);
}

Файл rout.yaml:

app_item_getid:
    path:/item/{id}
    controller: App\Controller\ShowitemController::getid
    requirements:
        id:'\d+'

Мой шаблон.html.twig doc:

{% for item in items%}
    -->This link target the product-page:
      "{{ path('app_showitem_getid', {'id': item.id}) }}"
{% endfor%}

Как я могу сгенерировать template.twig, который нацелен на страницу продукта элемента по идентификатору и его слагу? Я не могу правильно отобразить страницу продукта, так как она выдает ошибку «отсутствуют параметры», но ее ссылка есть в URL! Чего не хватает?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Если getid($id) - это действие контроллера, которое, по-видимому, происходит из комментария @Route над ним, у платформы может быть возможность автоматически извлекать объект элемента из базы данных, если он уникален.

public function getIdAction(Item $id)
{
    var_dump($id);  // $id instanceof Item::class
    // with $id->getId() or $id->id (if public), etc.
}

Если id или $ slug были уникальными, вы также можете -findOneBy(...) получить один элемент обратно вместо массива с одним элементом.

0 голосов
/ 26 апреля 2018

Я думаю здесь:

public function getid(int $id):Response
{
    ***********************************
    $item = $repository->find($id);
    ***********************************
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...