Я пытаюсь заменить выбор множеством опций для поля ввода
Я делаю, как показано ниже
Мой тип данных:
namespace Epita\HousingBundle\Form\Type;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Epita\HousingBundle\Form\Type\BedroomsTransformer;
class DatalistType extends AbstractType
{
public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder, array $options) {
$builder->addModelTransformer(new BedroomsTransformer(), true);
}
public function getParent()
{
return EntityType::class;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(['choices']);
}
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['choices'] = $options['choices'];
}
public function getName()
{
return 'datalist';
}
}
У меня есть поле формы ссылочного номеракак показано ниже, и я использую DatalistType::class
, как показано ниже
BedroomFormType:
namespace Epita\HousingBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Epita\HousingBundle\Entity\Bedroom;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
use Epita\HousingBundle\Form\Type\DatalistType;
class BedroomFormType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('description', TextType::class, array(
));
$builder->add('referencenumber', DatalistType::class,
array('required' => true,
'label' => 'Reference Number',
'class' => 'EpitaHousingBundle:Bedroom',
'choice_label' => 'referencenumber'
));
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'data_class' => Bedroom::class,
'csrf_protection' => false,
));
}
}
Я использую преобразователи данных для преобразования данных для поля, как показано ниже
namespace Epita\HousingBundle\Form\Type;
use Symfony\Component\Form\DataTransformerInterface;
use Epita\HousingBundle\Entity\Bedroom;
class BedroomsTransformer implements DataTransformerInterface {
public function transform($value) {
// transform the array to a string
// return implode(', ', $value);
return $value;
}
public function reverseTransform($value) {
// transform the string back to an array
// return explode(', ', $value);
return $value;
}
}
fields.html.twig:
{% block datalist_widget %}
<input list="{{ id }}_list" {{ block('widget_attributes') }}>
<datalist id="{{ id }}_list">
{% for choice in choices %}
<option value="{{ choice.label }}"></option>
{% endfor %}
</datalist>
{% endblock %}
services.yml:
form.type.datalist_type:
class: Epita\HousingBundle\Form\Type\DatalistType
tags:
- { name: form.type, alias: datalist }
Здесь проблема заключается в том, что я внедрил форму прототипа, и сборщик данных возвращает дополнительные (номера ссылки на базу данных) в раскрывающийся список
Пожалуйста, помогите мне кому-нибудь.Заранее спасибо ...