首页 > 解决方案 > Doctrine Translatable:如果可翻译字段不存在,如何返回字段的默认值

问题描述

我使用 Doctrine Translatable 来翻译我的某个实体。例如:我有实体“类别”,该实体有一个可翻译字段 - “名称”:

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository")
 * @ORM\Table(name="categories")
 */
class Category implements EntityUploadImageInterface, Translatable
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @Gedmo\Translatable
     * @ORM\Column(type="string", length=100)
     *
     * @var string
     */
    private $name = '';

    /// ...
}

这是一项很好的工作,但是当我切换到另一种语言并尝试使用可翻译字段时,我给出了空值,因为该实体的可翻译记录不存在。

问题:如果可翻译记录不存在,如何获取默认值字段?

标签: phpsymfonydoctrine-extensions

解决方案


您可以使用事件。

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository")
 * @ORM\Table(name="categories")
 * @ORM\HasLifecycleCallbacks
 */
class Category implements EntityUploadImageInterface, Translatable
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @Gedmo\Translatable
     * @ORM\Column(type="string", length=100)
     *
     * @var string
     */
    private $name = '';

    /** @ORM\PostLoad */
    public funcion setDefaultName()
    {
        if(empty($this->getName)) {
            $this->setName('some default value');
        }
    }

    /// ...
}

推荐阅读