Forms 在表单字段上使用EventListener时,无法为选项字段设置默认数据
我有一个带有动态选择字段语言的表单。不同类别的语言可能不同。我希望它们在默认情况下都被选中,所以我使用“数据”选项。但它只有在我不使用事件的情况下才有效。如果我尝试在$formModifier函数中使用它来动态添加语言,它将不起作用,并且所有语言都被取消选中。。。知道怎么修吗 下面是ProjectType类中的buildForm函数Forms 在表单字段上使用EventListener时,无法为选项字段设置默认数据,forms,symfony,Forms,Symfony,我有一个带有动态选择字段语言的表单。不同类别的语言可能不同。我希望它们在默认情况下都被选中,所以我使用“数据”选项。但它只有在我不使用事件的情况下才有效。如果我尝试在$formModifier函数中使用它来动态添加语言,它将不起作用,并且所有语言都被取消选中。。。知道怎么修吗 下面是ProjectType类中的buildForm函数 public function buildForm(FormBuilderInterface $builder, array $options) { (...)
public function buildForm(FormBuilderInterface $builder, array $options)
{
(...)
$builder
->add('category', 'choice', array(
'choices' => Category::$NAMES,
'multiple' => false,
'placeholder' => '',
))
->add('name', 'text')
->add('description', 'textarea', array(
'attr' => array('rows' => '10', 'class' => 'tinymce'),
))
->add('save', 'submit', array('label' => 'form.save'));
$formModifier = function (FormInterface $form, User $user, $category = null) {
$languages = null === $category ? array() : $this->userReputation->getAllowedLanguages($user, $category);
$form->add('languages', 'choice', array(
'multiple' => true,
'expanded' => true,
'choices' => $languages,
'data' => array_keys($languages),
));
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier, $user) {
$project = $event->getData();
$formModifier($event->getForm(), $user, $project->getCategory());
}
);
$builder->get('category')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier, $user) {
$category = $event->getForm()->getData();
$formModifier($event->getForm()->getParent(), $user, $category);
}
);
}
我使用此脚本在用户更改类别时进行ajax调用:
<script>
function requireReadyFunction() {
var $category = $('#project_category');
// When category gets selected ...
$category.change(function() {
// ... retrieve the corresponding form.
var $form = $(this).closest('form');
// Simulate form data, but only include the selected category value.
var data = {};
data[$category.attr('name')] = $category.val();
// Submit data via AJAX to the form's action path.
$.ajax({
url : $form.attr('action'),
type: $form.attr('method'),
data : data,
success: function(html) {
// Replace current languages field ...
$('#project_languages').replaceWith(
$(html).find('#project_languages')
);
}
});
});
}
</script>
在脚本中使用$category时,是指PHP变量还是创建脚本变量?如果是最后一个,不要使用$符号。这是脚本变量;我的代码是基于还有$。。。事实上,无论是否使用$-符号,这都没有区别,对于JS来说,它只是变量名的一部分。。。顺便说一句,我试过不用$2也能用同样的方法工作……我的错,我把它当作PHP代码来读。