JMSSerializer和FOSRestBundle - 注释不起作用."不存在"

kfp*_*pmg 5 php data-annotations symfony fosrestbundle jmsserializerbundle

我试图使用ExclusionPolicy,但我不断得到"注释不存在,或无法自动加载"错误.

这是抛出的确切错误:

[语义错误] Acme\DemoBundle\Entity\Attributes类中的注释"@JMS\SerializerBundle\Annotation\ExclusionPolicy"不存在,或者无法自动加载.

我的代码如下:

namespace Acme\DemoBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints;
use JMS\SerializerBundle\Annotation\ExclusionPolicy;
use JMS\SerializerBundle\Annotation\Expose;

/**
 * Acme\DemoBundle\Entity\Attributes
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\AttributesRepository")
 * 
 * @ExclusionPolicy("all")
 */
class Attributes
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

Kir*_*chs 10

您的问题是由使用错误的命名空间引起的.

代替:

use JMS\SerializerBundle\Annotation\ExclusionPolicy;
use JMS\SerializerBundle\Annotation\Expose;
Run Code Online (Sandbox Code Playgroud)

它应该是:

use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Expose;
Run Code Online (Sandbox Code Playgroud)

注意"Bundle"消失了.在Ver 0.11中,它被提取到自己的存储库中.

更改日志如下:

  • 命名空间更改

核心库已被提取到专用存储库 schmittjoh/serializer,以便在任何类型的PHP项目中更容易重用,而不仅仅是在Symfony2项目中.这会导致多个命名空间更改.您可以通过执行这些替换来调整项目(按顺序):

  • JMS\SerializerBundle\Serializer - > JMS\Serializer
  • JMS\SerializerBundle - > JMS\Serializer
  • JMS\Serializer\DependencyInjection - > JMS\SerializerBundle\DependencyInjection

  • 依赖性变化

您可能需要增加jms/di-extra-bundle的版本,以及jms/security-extra-bundle,具体取决于您的稳定性设置.由于作曲家的求解算法存在错误,有时还需要两次运行作曲家更新.