Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在非实体类的Symfony表单中添加ChoiceType选项_Javascript_Jquery_Ajax_Forms_Symfony - Fatal编程技术网

Javascript 在非实体类的Symfony表单中添加ChoiceType选项

Javascript 在非实体类的Symfony表单中添加ChoiceType选项,javascript,jquery,ajax,forms,symfony,Javascript,Jquery,Ajax,Forms,Symfony,我有一个由Ajax请求提交的Symfony表单。此表单包含两个字段:日期(datepicker)和天数(choiceType)。我无法初始化窗体生成的天数,因为它依赖于选定的日期。使用Javascript,我更新了select picker中的选项。这很有效。通常,选项如下所示:1焦耳 现在,在提交表单时,我需要在choiceType中添加这些字段 我使用了isXmlHttpRequest方法,因为表单是通过Ajax请求提交的,等待回答如果表单有效,我需要通知Ajax调用(我不想呈现其他模板)。

我有一个由Ajax请求提交的Symfony表单。此表单包含两个字段:日期(datepicker)和天数(choiceType)。我无法初始化窗体生成的天数,因为它依赖于选定的日期。使用Javascript,我更新了select picker中的选项。这很有效。通常,选项如下所示:
1焦耳

现在,在提交表单时,我需要在choiceType中添加这些字段

我使用了isXmlHttpRequest方法,因为表单是通过Ajax请求提交的,等待回答如果表单有效,我需要通知Ajax调用(我不想呈现其他模板)。 我在控制器中执行以下操作:


/**
*@param Request$Request
*@返回响应
*@Route(“/ajout\u favoris”,name=“ajoffavoris”)
*/
公共功能Ajoffavoris(请求$Request){
$form=$this->creerFormulaire()->getForm();
$form->handleRequest($request);
如果($request->isXmlHttpRequest()){
如果($form->isValid()){
//行动。。。
$reponse=['statut'=>'success'];
}否则{
$reponse=['statut'=>'forminvalid'];
}
$reponse=新响应(json_encode($reponse));
$reponse->headers->set('Content-Type','application/json');
返回$response;
}
返回$this->render('@Carte/Reservation/Reservation.html.twig',数组(
“form”=>$form->createView());
以下是我如何构建表单:

public function creerFormulaire(){
$formulaire=$this->createFormBuilder()
->addEventListener(FormEvents::PRE_SUBMIT,函数(FormEvent$event){
$form=$event->getForm();
$data=$event->getData();
$optionList=$this->getValidChoicesForNbJours($data[“nbJours]”);
$form->add('nbJours','choice',数组(
'attr'=>['占位符'=>'名称',
“类”=>“选择器选择器”,
],
“选项”=>$options列表,
));
})
->添加('DateFirst',DateTimeType::class[
'widget'=>'single_text',
'格式'=>'日/月/年',
'输入'=>'日期时间',
'label'=>'datedébut',
“必需”=>true,
'attr'=>['class'=>'datepicker输入日期',
'类型'=>'文本',
“占位符”=>“JJ/MM/AAAA”,
“只读”=>true,
“必需”=>true,]
])
->添加('nbJours','choice'[
“标签”=>“名称”,
“选项”=>[],
'attr'=>['占位符'=>'名称',
“类”=>“选择器选择器”,
“title”=>“Nombre de jours”,
“只读”=>true,
“必需”=>false,]
])
->添加('ajoffavoris',SubmitType::class[
'label'=>'Ajouter aux favoris',
'attr'=>['class'=>'btn btn主保留服务器']
]);
返回$formulaire;
}
下面是我如何填写选项:

公共函数GetValidChoicesfornJours($range){
$liste=[];

对于($i=1;$i您可以通过调用
$builder->get('nbJours')->resetViewTransformers();
在添加字段后,您可以通过调用
$builder->get('nbJours')->resetViewTransformers()禁用表单验证
添加字段后,请提供一些表单呈现方式的html。原因很可能是缺少表单标记,该标记未随数据一起发送。您是否已禁用CSRF?您是否也尝试发送
标记
-字段?我没有自动触摸CSRF保护。Symfony表单为令牌添加一个隐藏输入(如果分析,我们可以在浏览器的页面中看到)。在数据中添加令牌值,如
data={CSRF:document.getElementById('form_u-token').value}
或不添加任何更改。对!您也尝试过这个
data={{u-token document.getElementById('form_u-token').value}
。假设此隐藏表单字段名为
\u token
,请提供一些有关表单呈现方式的html。原因很可能是缺少表单标记而未随数据一起发送。您是否已禁用CSRF?您是否已尝试发送
token
-字段?我不接触CSRF保护ion.Symfony表单会自动为令牌添加隐藏输入(如果分析的话,我们可以在浏览器的页面中看到)。在数据中添加令牌值,如
data={CSRF:document.getElementById('form\u token')。value}
或不添加任何更改。对!您也尝试过这个
data={\u token document.getElementById吗('form__-token').value}
。假设此隐藏表单字段被称为
\u-token
path_to_add_fav = ...
idPlan = ...
$("#form_ajoutFavoris").click(function (e) {
    let dateDebut = document.getElementById('form_dateDebut').value;
    let nbJours = document.getElementById('form_nbJours').value;

    if (dateDebut && nombreJours){
        let data = {
            poste_id: idPoste,
            plan_id: idPlan,
            nbJours: nbJours ,
        };

        $.ajax({
            url: path_to_add_fav,
            type: "post",
            data: JSON.stringify(data),
            dataType: "json",

            success: function (data) {
                console.log(data.statut);
                if (data.statut === "success") {
                    window.parent.$.fancybox.close();
                }
            }
        });
    }
});

let new_options = "";
for (i = 0; i < nbOptions; i++, j++)
        new_options += "<option value=" + j + ">" + j + " jours</option>";
$("#form_nbJours").html(new_options).selectpicker('refresh');
$('form').submit(function (e) {
    console.log("ok");
    e.preventDefault();
    let formSerialize = $(this).serialize();

    $.post(path_to_add_fav, formSerialize, function(response) {
        console.log(response.statut);
        if (response.statut === "success") {
            console.log("Réponse correcte !");
            window.parent.$.fancybox.close();
        }
    }, 'JSON');
}