首页 > 解决方案 > 生成 slug 时 Twig 出错,缺少用于生成 URL 的参数(“slug”)

问题描述

我想呈现我的 Twig 产品页面及其 url-slug。我的控制器:

* @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);
}

文件 routes.yaml:

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

我的 template.html.twig 文档:

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

如何通过 id 及其 slug 生成以项目产品页面为目标的 template.twig?我无法正确呈现产品页面,因为它会引发“缺少参数”错误,但它的 slug 就在 url 中!少了什么东西 ?

标签: symfonytwig

解决方案


如果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(...)可以取回单个项目,而不是仅包含 1 个项目的数组。


推荐阅读