Forms 在symfony2选项输入字段中维护过账订单(带有选项列表)
我在项目中使用Symfony2框架,并使用表单组件创建表单。我正在使用选择输入字段类型来允许用户选择多个选项,并且我正在使用一个插件来允许用户订购这些选项。 不幸的是,将表单发布到控制器时,这些选项的顺序没有得到维护。表单组件使用Forms 在symfony2选项输入字段中维护过账订单(带有选项列表),forms,symfony,Forms,Symfony,我在项目中使用Symfony2框架,并使用表单组件创建表单。我正在使用选择输入字段类型来允许用户选择多个选项,并且我正在使用一个插件来允许用户订购这些选项。 不幸的是,将表单发布到控制器时,这些选项的顺序没有得到维护。表单组件使用choices选项的顺序,请求具有正确的顺序 如何使用表单组件和选项输入字段类型维护过账订单 作为记录,我在Google、Stackoverflow和Github上进行了搜索,只发现了一个关于保持首选项顺序的问题。这个问题确实涉及到一个排序选项,但我在Symfony2文
choices
选项的顺序,请求具有正确的顺序
如何使用表单组件和选项输入字段类型维护过账订单
作为记录,我在Google、Stackoverflow和Github上进行了搜索,只发现了一个关于保持首选项顺序的问题。这个问题确实涉及到一个排序选项,但我在Symfony2文档中找不到这个选项。我试图解决同样的问题:需要选择几个组织并在列表中对它们进行排序 在
$form->getData()
之后,我的请求订单被更改
我制作了表单事件处理程序,发现数据在FormEvents::PRE_SUBMIT
事件上的顺序正确,并将其保存在$this->preSubmitData
中
之后,在FormEvents::SUBMIT
event上,我从$this->preSubmitData
以错误的顺序覆盖数据(实际上,这取决于选项的顺序)。(您可以从方法中删除数组\u merge)
我不知道这是否可行,但您可以尝试将选项列表设置为表单的参数:
newmyform($choiceList)
。您可以在控制器中创建该默认列表。然后,在发布数据时,您可以尝试使用$request->request->get('fieldName')
检索新的有序列表,并将其插入表单中。但这将包括安全漏洞。如果用户发送了一个无效的列表,这将是一个问题。嗨,哈金,你已经提到了安全问题,所以这对我没有帮助。
class PriorityOrganizationSettingsType extends AbstractType {
private $preSubmitData;
/**
* @param FormBuilderInterface $builder
* @param array $options
* @throws \Exception
*/
public function buildForm(FormBuilderInterface $builder, array $options)
$builder
->add('organizations', 'choice', array(
'multiple' => 'true',
'required' => false,
'choices' => $this->getPriorityOperatorChoices(),
'attr' => [
'class' => 'multiselect-sortable',
'style' => 'height: 350px; width:100%;'
]
))
;
$builder->addEventListener(FormEvents::SUBMIT, array($this, 'submitEvent'));
$builder->addEventListener(FormEvents::PRE_SUBMIT, array($this, 'preSubmitEvent'));
}
public function preSubmitEvent(FormEvent $event) {
$this->preSubmitData = $event->getData();
}
public function submitEvent(FormEvent $event) {
$event->setData(array_merge(
$event->getData(),
$this->preSubmitData
));
}
}