gpt4 book ai didi

forms - 使用表单事件时的 Symfony 表单字段顺序

转载 作者:行者123 更新时间:2023-12-01 22:05:02 29 4
gpt4 key购买 nike

我正在创建一个类似于所需的动态表单 here .

好吧,我设法让它工作。但我希望该类型的 native 字段可以出现在动态下拉列表之后。这不是开箱即用的,因为保管箱是在 PRE_SET_DATA 事件中添加到表单中的(在构建表单并添加名称字段之后),如您所见:

public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('country', 'entity', array(
'class'=>'TestBundle:Country',
'property'=>'name',
'property_path'=>false //Country is not directly related to City
));
$builder->add('name');

$factory = $builder->getFormFactory();

(...)

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (DataEvent $event) use ($refreshStates, $setCountry)
{
$form = $event->getForm();
$data = $event->getData();

if($data == null)
return;

if($data instanceof City){
$country = ($data->getId()) ? $data->getState()->getCountry() : null ;
$refreshStates($form, $country);
$setCountry($form, $country);
}
});

我尝试对名称字段执行相同的操作,将其添加到 buildForm 函数的开头:

$addBaseFields = function ($form) use ($factory)
{
$form->add($factory->createNamed('text', 'name'));
};

然后我将其添加到事件中:

 $builder->addEventListener(FormEvents::PRE_SET_DATA, function (DataEvent $event) use ($refreshStates, $setCountry)
{
$form = $event->getForm();
$data = $event->getData();

if($data == null)
return;

if($data instanceof City){
$country = ($data->getId()) ? $data->getState()->getCountry() : null ;
$refreshStates($form, $country);
$setCountry($form, $country);
$addBaseFields($form);
}
});

这样的作品。但是,html5 字段验证停止工作。例如:如果我将名称定义为“数字”类型而不是“文本”: $form->add($factory->createNamed('number', 'name')); 它将接受任何内容,任何文本。

是否有更好的方法来执行此操作,以便我仍然可以使用数字浏览器验证?

最佳答案

这是 2.0 和 2.1 版本上的 Symfony 错误,与表单事件无关。

当在“数字”字段中输入“9fgda”等字符串时,不会出现验证错误,并且字符串值“9fgda”会转换为数字值“9”并且不会出现错误。

这是由 NumberFormatter 造成的,应该在版本 2.2 中修复。

有关此错误的更多信息 here

关于forms - 使用表单事件时的 Symfony 表单字段顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075183/

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