gpt4 book ai didi

validation - 验证动态填充的选择字段

转载 作者:行者123 更新时间:2023-12-04 16:10:55 24 4
gpt4 key购买 nike

我有两个选择字段,一个取决于另一个。

在构建表单时,依赖字段有一个空的选择数组。

然后我用 JavaScript 填充这个字段,从一个 Action 中请求一些数据。

问题来自验证。当然它不会通过,因为单个或多个值不能对空值有效。
为了解决这个问题,我创建了一个 PRE_BIND监听器基本上删除然后使用正确的值重新创建选择字段,但它仍然没有通过验证。
$form->getErrors()只返回 $form->getErrorsAsString()在我的选择字段中返回一个错误。

我的表格:

<?php

namespace Foo\BarBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class BarFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
// other fields

// This field is filled in ajax
$builder->add('stores', 'choice', array(
'label' => 'form.label.stores',
'translation_domain' => 'FooBarBundle',
'choices' => $options['storesList'],
'required' => false,
'multiple' => true,
'auto_initialize' => false,
'attr' => array(
'class' => 'chzn-select',
'placeholder' => 'form.placeholder.stores'
)));

$func = function (FormEvent $e) use ($options) {
$data = $e->getData();
$form = $e->getForm();
if ($form->has('stores')) {
$form->remove('stores');
}

$brand = isset($data['brand']) ? $data['brand'] : null;

if ($brand !== null) {
$choices = $options['miscRepo']->getStoresNameIndexedById($brand);
$choices = array_keys($choices);
$choices = array_map('strval', $choices);
} else {
$choices = array();
}

$form->add('stores', 'choice', array('choices' => $choices, 'multiple' => true, 'attr' => array('class' => 'chzn-select')));
};

$builder->addEventListener(FormEvents::PRE_SUBMIT, $func);
}

public function getName()
{
return 'bar_form_campaign';
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(array(
'storesList',
'miscRepo',
));
}
}

最佳答案

我有和你一样的问题:通过 javascript 更新一个字段,但没有通过验证。在 PRE_SUBMIT 事件上,读取您使用 javascript 添加的值,查询并获取具有该 ID 的对象,并更新字段选择。

$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$data = $event->getData();
$form = $event->getForm();
$pageId = $data['page_id'];

$page = $this->myManager->getPage($pageId);
$options = array($page->getId() => $page->getTitle());

$form->add('page_id', 'choice', array(
'label' => 'Select page',
'choices' => $options,
'required' => true,
'placeholder' => 'Select page'
));

$form->getData()->setPageId($pageId);
});

关于validation - 验证动态填充的选择字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17815712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com