是可转换值的后备信息

时间:2018-10-04 09:28:42

标签: symfony doctrine-orm doctrine-extensions

使用Atlantic18/DoctrineExtensions translatable feature时,我无法使用后备值。

我想知道每个可翻译属性(实体中带有@Gedmo\Translatable批注的属性)我获得的值是后备值还是真实值。

我试图:

  1. 使用postLoad event对其进行管理,但这确实很丑陋 处理多个可翻译属性时会很混乱 和多个实体:

    <?php
    
    namespace AppBundle\EventListener;
    
    use AppBundle\Entity\MyEntity;
    use Doctrine\ORM\Event\LifecycleEventArgs;
    
    class MyEntityListener
    {
        public function postLoad(LifecycleEventArgs $args)
        {
            $entity = $args->getObject();
            if (!$entity instanceof MyEntity) {
                return;
            }
    
            $em = $args->getObjectManager();
            if ($entity->getName() === null) {
                $entity->setName($em->getRepository(MyEntity::class)->findFallbackValueForField($entity->getId(), 'name'));
                $entity->setIsNameFallback(true);
            }
        }
    }
    
  2. 使用custom AST walkers并获得所需的效果 数据以一种更干净的方式。但是,我不知道如何添加 我的实体上的字段,而无需保留信息,因为它取决于语言环境。

有人可以向我解释一下,如果值是后备,我如何才能知道实体的每个属性?

似乎我的问题与问题How to check if record has been translated ? #1439有关。

0 个答案:

没有答案