Symfony2 - 如何在控制器中使用@Entity注释?

时间:2017-02-09 09:20:03

标签: php symfony

ParamConverter的Symfony手册有这个例子:

/**
 * @Route("/blog/{post_id}")
 * @Entity("post", expr="repository.find(post_id)")
 */
public function showAction(Post $post)
{
}

来源:http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html#fetch-via-an-expression

但是使用@Entity注释会给我这个错误。

The annotation "@Entity" in method AppBundle\Controller\CurrencyController::currencyAction() was never imported. Did you maybe forget to add a "use" statement for this annotation?

显然,我需要使用命名空间,但是哪一个?请帮忙。

3 个答案:

答案 0 :(得分:4)

Entity注释仅存在于master(或futur v4)上。 Source file here

但正如您所看到的,这只是带有expr选项的@ParamConverter注释的快捷方式,因此您必须在下一版本之前使用此注释。

最好的问候。

答案 1 :(得分:1)

您正在尝试使用ParameterConverter,因此这种语法错误。

改为使用

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;

/**
 * @Route("/blog/{post_id}")
 * @ParamConverter("post_id", class="VendorBundle:Post")
 */
public function showAction(Post $post)
{
}

VendorBundle:Post应该替换为您的供应商(如果有的话)和Bundle。

答案 2 :(得分:0)

不推荐使用带有选项repository_method的注释@ParamConverter

The repository_method option of @ParamConverter is deprecated and will be removed in 6.0. Use the expr option or @Entity.

因此,使用@Entity (documentation)

会更好

您必须添加命名空间:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;