【发布时间】:2017-06-10 23:31:23
【问题描述】:
我正在处理 symfony 表单,我在字段中使用 select2 进行 ajax 请求,我监听 PRE_SUBMIT 事件以获取选项列表并提供给 choices 选项
$opts = $config->getOptions();
$opts['choices'] = $listImages; //array of Image object
但是在 var_dump 的 PRE_SUBMIT 事件中,我在表单中获取选定的值,并在闭包中使用它,并且当持久化该字段时,该字段具有空值,所以我在 POST_SUBMIT 事件中执行 var_dump该字段确实具有 null 作为值。而且我没有看到我错过了什么
我的 FormType 如下:
class ArticleType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('image', ChoiceType::class, array(
'expanded' => false,
'multiple' => false))
//other field
;
$formModifier = function (FormInterface $form, $image) use ($options) {
$listImages = $options['em']->getRepository('AlmotivAppBundle:Image')->findBy(array(
'id' => $image
));
if (!$listImages) {
$form->add('image')->addError(new FormError(
'Nous n\'avons pas p trouver l\'image, veuiller choisir une autre'
));
}
//die(var_dump($listImages)); //array of Image object
$config = $form->get('image')->getConfig();
$opts = $config->getOptions();
$opts['choices'] = $listImages;
$typeName = get_class($config->getType()->getInnerType());
$form->add('image', $typeName, $opts);
//die(var_dump($form->get('image')->getConfig()->getData())); //return null
};
$builder->get('image')->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$image = $event->getData();
//die(var_dump($image)); //return 10
$formModifier($event->getForm()->getParent(), $image);
}
);
我正在使用框架的 v3.1。 如果您需要更多,请询问。
【问题讨论】:
标签: php forms symfony symfony-forms symfony-3.1