【问题标题】:How annotation @groups for the sluggable columnsluggable 列如何注解@groups
【发布时间】:2018-11-11 09:16:21
【问题描述】:

我正在使用 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 注释归因于?

【问题讨论】:

    标签: php symfony annotations entity slug


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,但我正在使用 ApiPlatform ...我留下了解决方案的答案:-)
    【解决方案2】:

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

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

    我在其中插入了 Groups 注释并从它的 getter 返回原始的“slug”字段:

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

    【讨论】:

      猜你喜欢
      • 2015-05-04
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2014-10-05
      • 2018-09-29
      • 1970-01-01
      相关资源
      最近更新 更多