如何为 sluggable 列注解@groups

How annotation @groups for the sluggable column

我在 symfony 3.3 中工作:

我需要将 @Groups 注释添加到 slug 字段(使用 ORMBehaviors\Sluggable\Sluggable 创建),以便我可以将此字段传递给我将在组中指定的其他实体。 我该怎么做?

这是实体 'foo':

/**
 * @var int
 *
 * @ORM\Id
 * @ORM\GeneratedValue
 * @ORM\Column(type="integer")
 *
 * @Groups({"advertisingSpace"})
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(type="string", length=4)
 *
 * @Groups({"advertisingSpace"})
 */
private $code;

/**
 * @var string
 *
 * @ORM\Column(type="string", length=255)
 *
 * @Groups({"advertisingSpace"})
 */
private $description;

/**
 * @Vich\UploadableField(mapping="advertisingspacecategory_icon", fileNameProperty="icon")
 *
 * @var File
 */
private $iconFile;

/**
 * @var string
 *
 * @ORM\Column(type="string", length=255)
 *
 * @Groups({"advertisingSpace"})
 */
private $icon;

/**
 * @var array
 *
 * @ORM\OneToMany(
 *     targetEntity="AppBundle\Entity\AdvertisingSpace",
 *     mappedBy="category"
 * )
 */
private $advertisingSpaces;

/**
 * @return int
 */
public function getId()
{
    return $this->id;
}

/**
 * @return string
 */
public function getIcon()
{
    return $this->icon;
}

/**
 * @param string $icon
 *
 * @return AdvertisingSpaceCategory
 */
public function setIcon($icon)
{
    $this->icon = $icon;

    return $this;
}

/**
 * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $iconFile
 *
 * @return AdvertisingSpaceCategory
 */
public function setIconFile(File $iconFile = null)
{
    $this->iconFile = $iconFile;

    if ($iconFile) {
        $this->updatedAt = new \DateTimeImmutable();
    }

    return $this;
}

/**
 * @return File|null
 */
public function getIconFile()
{
    return $this->iconFile;
}

/**
 * @param int $id
 *
 * @return AdvertisingSpaceCategory
 */
public function setId($id)
{
    $this->id = $id;

    return $this;
}

/**
 * @return string
 */
public function getCode()
{
    return $this->code;
}

/**
 * @param string $code
 *
 * @return AdvertisingSpaceCategory
 */
public function setCode($code)
{
    $this->code = $code;

    return $this;
}

/**
 * @return array
 */
public function getAdvertisingSpaces()
{
    return $this->advertisingSpaces;
}

/**
 * @param array $advertisingSpaces
 *
 * @return AdvertisingSpaceCategory
 */
public function setAdvertisingSpaces($advertisingSpaces)
{
    $this->advertisingSpaces = $advertisingSpaces;

    return $this;
}

/**
 * @return string
 */
public function getDescription()
{
    return $this->description;
}

/**
 * @param string $description
 *
 * @return $this
 */
public function setDescription($description)
{
    $this->description = $description;

    return $this;
}

/**
 * @return array
 */
public function getSluggableFields()
{
    return [ 'slug' ];
}

/**
 * @param string $values
 *
 * @return string
 */
public function generateSlugValue($values)
{
    return implode('-', $values);
}

没有私有 slug 声明,因为我可以将 @groups 注释归因于?

您应该安装 JMS Serializer Bundle 并在您自己的 getSlug() 方法上使用 @VirtualProperty 注释,如下所示

/**
 * @VirtualProperty
 * @Groups({"advertisingSpace"})
 */
 public function getSlug()
 {
     return parent::getSlug();
 }

我还是通过创建一个新的字符串变量解决了这个问题(例如"SlugName"):

/**
 * @var string
 *
 * @Groups({"advertisingSpace"})
 */
private $slugName;

我在其中插入了群组注释,returns 来自其 getter 的原始 'slug' 字段:

/**
 * @ return string
 */
public function getSlugName(): string
{
    return $this->slug;
}