symfony : can't we have a hidden entity field?

后端 未结 5 1530
谎友^
谎友^ 2020-12-29 06:52

I am rendering a form with an entity field in symfony.

It works well when i choose a regular entity field.

$builder
    ->add(\'parent\',\'entity\         


        
5条回答
  •  渐次进展
    2020-12-29 07:11

    With Symfony 5, I use the solution of a Hidden type that implements DataTransformerInterface interface.

    dm = $doctrine;
        }
    
        /**
         *
         * {@inheritdoc}
         */
        public function buildForm(FormBuilderInterface $builder, array $options): void
        {
            // Set class, eg: App\Entity\RuleSet
            $this->entityClass = sprintf('App\Entity\%s', ucfirst($builder->getName()));
            $builder->addModelTransformer($this);
        }
    
        public function transform($data): string
        {
            // Modified from comments to use instanceof so that base classes or interfaces can be specified
            if (null === $data || !$data instanceof $this->entityClass) {
                return '';
            }
    
            $res = $data->getId();
    
            return $res;
        }
    
        public function reverseTransform($data)
        {
            if (!$data) {
                return null;
            }
    
            $res = null;
            try {
                $rep = $this->dm->getRepository($this->entityClass);
                $res = $rep->findOneBy(array(
                    "id" => $data
                ));
            }
            catch (\Exception $e) {
                throw new TransformationFailedException($e->getMessage());
            }
    
            if ($res === null) {
                throw new TransformationFailedException(sprintf('A %s with id "%s" does not exist!', $this->entityClass, $data));
            }
    
            return $res;
        }
    }
    

    And to use the field in the form:

    use App\Form\Type\EntityHiddenType;
    
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        // Field name must match entity class, eg 'ruleSet' for App\Entity\RuleSet
        $builder->add('ruleSet', EntityHiddenType::class);
    }
    

提交回复
热议问题