路由器和{slug}来检索实体

时间:2017-02-23 13:55:19

标签: symfony symfony-routing

在一个实体中,我使用DoctrineExtension定义了一个slug,我在我的href中使用它。但是......我遇到了路由器和/或ParamConverter的问题。

在我的控制器中:

/**
 * @Route("/{slug}", name="strain_view")
 * @ParamConverter("strain", class="AppBundle:Strain", options={
 *     "repository_method" = "findOneWithAll",
 * })
 * @Security("is_granted('STRAIN_VIEW', strain)")
 */
public function viewAction(Strain $strain)
{
    return $this->render('strain/view.html.twig', [
        'strain' => $strain,
    ]);
}

我发现了这个错误:

  

SQLSTATE [HY093]:参数号无效:参数未定义

在调试栏中,我看到,问题是数组中的数组:

  

参数:[0 => [slug => t1p-0004-e-coli-pgem-t-promupf3-leu2-termupf3]]

当我用{id}替换@Route:{slug}并手动输入网址时,我已经

  

参数:[0 => T1P-0004-E-大肠杆菌-PGEM叔promupf3-LEU2-termupf3]

并且...它的工作,但在我的存储库中我是

public function findOneWithAll($slug)
{
    $query = $this->createQueryBuilder('strain')
            ->where('strain.slug = :slug')
            ->setParameter('slug', $slug)
            ->getQuery();

我不明白为什么。

2 个答案:

答案 0 :(得分:1)

你应该试试这个

/**
 * @Route("/{slug}", name="strain_view")
 * @Entity("strain", expr="repository.findOneWithAll(slug)")
 * @Security("is_granted('STRAIN_VIEW', strain)")
 */
public function viewAction(Strain $strain)
{
    return $this->render('strain/view.html.twig', [
        'strain' => $strain,
    ]);
}

答案 1 :(得分:1)

简单地说:

/**
  * @ParamConverter("strain", options={"mapping": {"slug": "slug"}})
  */