Symfony 3控制器实体参数

时间:2016-02-24 20:32:16

标签: crud symfony

从Symfony 2.7升级到3.0.2后,我注意到crud生成器的控制器已经改变。

Symfony 2样本:

/**
 * Finds and displays a Article entity.
 *
 * @Route("/{id}", name="article_show")
 * @Method("GET")
 * @Template("AppBundle:article:show.html.twig")
 */
public function showAction($id)
{
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('AppBundle:Article')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find Article entity.');
    }

    $deleteForm = $this->createDeleteForm($id);

    return array(
        'entity'      => $entity,
        'delete_form' => $deleteForm->createView(),
    );
}

Symfony 3样本:

/**
 * Finds and displays a Article entity.
 *
 * @Route("/{id}", name="article_show")
 * @Method("GET")
 */
public function showAction(Article $article)
{
    $deleteForm = $this->createDeleteForm($article);

    return $this->render('article/show.html.twig', array(
        'article' => $article,
        'delete_form' => $deleteForm->createView(),
    ));
}

不知道究竟是什么时候发生了变化,因为我在使用2.8版本时没有使用crud生成器。

无论如何,我感兴趣的是:

public function showAction(Article $article)

似乎与早期版本的相同:

    public function showAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $entity = $em->getRepository('AppBundle:Article')->find($id);
        ...
    }

我无法在Symfony网站上找到有关此内容的任何文档。有人可以解释这个功能究竟是如何工作的,我可以在哪里找到更多信息?它仅适用于实体,还是......?

谢谢!

1 个答案:

答案 0 :(得分:2)

此功能称为ParamConverter - 请在此处阅读更多内容:http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

在您的控制器中,您没有@ParamConverter注释,因为:

If you use type hinting as in the example above, you can even omit the @ParamConverter annotation altogether