Как аннотировать @groups для медленного столбца - PullRequest
0 голосов
/ 01 июня 2018

Я работаю в 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);
}

не имеет объявления частного слага, поскольку я могу приписать аннотацию @groups к?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Я все равно решил это, создав новую строковую переменную (например, "SlugName"):

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

, куда я вставил аннотацию Groups и которая возвращает исходное поле 'slug' из получателя:

/**
 * @ return string
 */
public function getSlugName(): string
{
    return $this->slug;
}
0 голосов
/ 01 июня 2018

Вы должны установить JMS Serializer Bundle и использовать аннотацию @VirtualProperty по своему собственному getSlug() методу, подобному следующему

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