您好我是symfony的新手我有使用Ajax的问题 我有这个班级
class categorie extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$categories_choices = array(
'VEHICULES' => array(
'101' => 'Voitures',
'102' => 'Motos',
'103' => 'Vélos ',
'104' => 'Pièces auto',
'105' => 'Utilitaires / Véhicules commerciaux',
'106' => 'Bateaux / Nautisme',
),
'IMMOBILIER' => array(
'201' => 'Vente / Achat',
'202' => 'Location',
'203' => 'Colocation',
'204' => 'Location vacances',
'205' => 'Garages / Parkings',
'206' => 'Terrains',
'207' => 'Bureaux / Commerces',
),
);
$builder->add('Categorie', 'choice',array(
'choices' =>$categories_choices,
'required' => true ,
'required' => 'Le champ est obligatoire.',
'attr' => array('onchange' => 'FormCategoryAjaxRequest(this.value)')
));
$builder->add('Type', 'choice', array(
'choices' => array('m' => 'Offre', 'f' => 'demande')
));
}
我的想法是使用javascript,这是我的功能:
FormCategoryAjaxRequest(ref_doc) {
if (ref_doc==101 || ref_doc==102 {
var DivToAdd = document.getElementById('registration');
tempInput = document.createElement('input');
tempInput.setAttribute("type","text");
tempInput.setAttribute("id","hamza");
var newlabel = document.createElement('Label');
newlabel.setAttribute("for","hamza");
newlabel.innerHTML = " text";
DivToAdd.appendChild(newlabel);
DivToAdd.appendChild(tempInput);
}
}
我想在用户选择类别类型时添加另一个输入,它对Ajax很简单,但我没有找到任何解决方案吗?
答案 0 :(得分:0)
我认为如果你用ajax添加一个输入,你的表单将在验证时发送错误。
如果要添加输入(在验证期间),您应该查找表单事件侦听器。 doc:http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html
另一种方法是使用表单类中的选项'required=>false'
初始化所需的所有字段,并在文档准备好的javascript中使用可见性。
答案 1 :(得分:0)
好的,我想我明白你想做什么。所以最好的方法是:
在表单类型中添加附加输入:
$builder->add('model', 'text');
用javascript隐藏它(以jQuery为例):
$(function(){
$('input[name="model"]').hide();
});
修改您的FormCategoryAjaxRequest
功能,根据您的条件显示您的字段:
function FormCategoryAjaxRequest(ref_doc) {
if (ref_doc==101 || ref_doc==102 {
$('input[name="model"]').show();
}
}
有了它,它应该按预期工作。为了完美,您可以在NotBlank
事件上根据所选的选项以动态方式添加PostSetData
约束。 Look here了解更多信息。