X-Git-Url: https://git.rapsys.eu/airbundle/blobdiff_plain/a463786a94041a759e6420045eb031183a5f6afc..b603574e4355dac6e0a75d5bffd3c027ad19704d:/Form/Extension/Type/HiddenEntityType.php diff --git a/Form/Extension/Type/HiddenEntityType.php b/Form/Extension/Type/HiddenEntityType.php index 3e85cc6..f9b27d1 100644 --- a/Form/Extension/Type/HiddenEntityType.php +++ b/Form/Extension/Type/HiddenEntityType.php @@ -35,44 +35,46 @@ class HiddenEntityType extends HiddenType implements DataTransformerInterface { $this->dm = $doctrine; } - /** + /** * Configure options * - * {@inheritdoc} - */ - public function configureOptions(OptionsResolver $resolver) { + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver): void { //Call parent - parent::configureOptions($resolver); + parent::configureOptions($resolver); - // Derive "data_class" option from passed "data" object - $class = function (Options $options) { - return isset($options['data']) && \is_object($options['data']) ? \get_class($options['data']) : null; - }; + //Derive "data_class" option from passed "data" object + $class = function (Options $options) { + return isset($options['data']) && \is_object($options['data']) ? \get_class($options['data']) : null; + }; - $resolver->setDefaults([ - 'class' => $class + $resolver->setDefaults([ + #'data_class' => null, + 'class' => $class ]); } - /** * Build form * * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options): void { - #$this->entityClass = sprintf('App\Entity\%s', ucfirst($builder->getName())); - #var_dump($builder->getName()); - #$this->entityClass = sprintf('App\Entity\%s', ucfirst($builder->getName())); - //$this->dataClass[$builder->getName()] = $options['data_class']; - //Set class from options['class'] $this->class = $options['class']; - //Check class + //Without class if (empty($this->class)) { //Set class from namespace and field name $this->class = str_replace('Form\\Extension\\Type', 'Entity\\' ,__NAMESPACE__).ucfirst($builder->getName()); + //With bundle named entity + } elseif ( + ($pos = strpos($this->class, ':')) !== false && + !empty($entity = substr($this->class, $pos + 1)) + ) { + //Set class from namespace and entity name + $this->class = str_replace('Form\\Extension\\Type', 'Entity\\' ,__NAMESPACE__).$entity; } //Set this as model transformer @@ -80,8 +82,14 @@ class HiddenEntityType extends HiddenType implements DataTransformerInterface { $builder->addModelTransformer(clone $this); } + /** + * Transform data to string + * + * @param mixed $data The data object + * @return string The object id + */ public function transform($data): string { - // Modified from comments to use instanceof so that base classes or interfaces can be specified + //Modified from comments to use instanceof so that base classes or interfaces can be specified if ($data === null || !$data instanceof $this->class) { return ''; } @@ -91,21 +99,27 @@ class HiddenEntityType extends HiddenType implements DataTransformerInterface { return $res; } - public function reverseTransform($data) { - if (!$data) { + /** + * Reverse transformation from string to data object + * + * @param mixed $value The object id + * @return mixed The data object + */ + public function reverseTransform(mixed $value): mixed { + if (!$value) { return null; } $res = null; try { $rep = $this->dm->getRepository($this->class); - $res = $rep->findOneById($data); + $res = $rep->findOneById($value); } catch (\Exception $e) { throw new TransformationFailedException($e->getMessage()); } if ($res === null) { - throw new TransformationFailedException(sprintf('A %s with id "%s" does not exist!', $this->class, $data)); + throw new TransformationFailedException(sprintf('A %s with id %s does not exist!', $this->class, $value)); } return $res;