<?php
namespace Whater\Infrastructure\CommonBundle\Form\Type;
use Whater\Infrastructure\CommonBundle\Form\DataTransformer\ObjectToIdTransformer;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Util\StringUtil;
use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* Class EntityHiddenType
*
* @package Whater\Infrastructure\CommonBundle\Form\Type
*/
class EntityHiddenType extends AbstractType
{
/** @var ManagerRegistry */
protected $registry;
/**
* @param ManagerRegistry $registry
*/
public function __construct(ManagerRegistry $registry)
{
$this->registry = $registry;
}
/**
* @inheritdoc
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$transformer = new ObjectToIdTransformer($this->registry, $options['em'], $options['class'], $options['property']);
$builder->addModelTransformer($transformer);
}
/**
* @inheritdoc
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired(['class']);
$resolver->setDefaults([
'data_class' => null,
'invalid_message' => 'The entity does not exist.',
'property' => 'id',
'em' => 'default'
]);
$resolver->setAllowedTypes('invalid_message', ['null', 'string']);
$resolver->setAllowedTypes('property', ['null', 'string']);
$resolver->setAllowedTypes('em', ['null', 'string', ObjectManager::class]);
}
/**
* @inheritdoc
*/
public function getParent()
{
return HiddenType::class;
}
/**
* @inheritdoc
*/
public function getBlockPrefix()
{
return 'whater_' . StringUtil::fqcnToBlockPrefix(get_class($this));
}
/**
* @return string
*/
public function getName()
{
return $this->getBlockPrefix();
}
}