我使用表单组件并在呈现给选择字段的表单上选择字段类型。在客户端,我使用select2 插件tags: true
,它使用允许在其中添加新值的设置初始化选择。但是如果我添加一个新值,那么服务器上的验证将失败并出现错误
此值无效。
因为新值不在选择列表中。
有没有办法允许添加新值来选择字段类型?
我使用表单组件并在呈现给选择字段的表单上选择字段类型。在客户端,我使用select2 插件tags: true
,它使用允许在其中添加新值的设置初始化选择。但是如果我添加一个新值,那么服务器上的验证将失败并出现错误
此值无效。
因为新值不在选择列表中。
有没有办法允许添加新值来选择字段类型?
问题出在选择转换器中,它会删除选择列表中不存在的值。
禁用变压器的解决方法帮助了我:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('choiceField', 'choice', ['choices' => $someList]);
// more fields...
$builder->get('choiceField')->resetViewTransformers();
}
这是一个示例代码,以防有人需要 EntityType 而不是 ChoiceType。将此添加到您的 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);
});
不,那里没有。
您应该通过以下任一方式手动实现: