Allow to add a new value in a choice Field Type

早过忘川 提交于 2019-12-03 12:11:11

问题


I use Form Component and have a choice Field Type on a form which is rendered to a select field. On a client-side I use select2 plugin which initializes the select with the setting tags: true wich allows to add a new value in it. But if I add a new value then a validation on a server will fail with error

This value is not valid.

because the new value isn't in a choice list.

Is there a way to allow adding of a new value to choice a Field Type?


回答1:


The problem is in a choice transformer, which erases values that don't exist in a choice list.
The workaround with disabling the transformer helped me:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('choiceField', 'choice', ['choices' => $someList]);

    // more fields...

    $builder->get('choiceField')->resetViewTransformers();
}



回答2:


Here's an example code in case someone needs this for EntityType instead of the ChoiceType. Add this to your FormType:

use AppBundle\Entity\Category;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;

$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
    $data = $event->getData();

    if (!$data) {
        return;
    }

    $categoryId = $data['category'];

    // Do nothing if the category with the given ID exists
    if ($this->em->getRepository(Category::class)->find($categoryId)) {
        return;
    }

    // Create the new category
    $category = new Category();
    $category->setName($categoryId);
    $this->em->persist($category);
    $this->em->flush();

    $data['category'] = $category->getId();
    $event->setData($data);
});



回答3:


No, there is not.

You should implement this manually by either:

  • using the select2 events to create the new choice via ajax
  • catching the posted options before validating the form, and add it to the options list


来源:https://stackoverflow.com/questions/32628035/allow-to-add-a-new-value-in-a-choice-field-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!