Невозможно получить доступ к переменной javascipt внутри контроллера Symfony - PullRequest
0 голосов
/ 31 мая 2019

В моем проекте Symfony (v3.4) мне нужно передать некоторые переменные javascript из моего представления в мой контроллер, содержащий форму: я использовал Jquery и Ajax для отправки моей переменной на правильный маршрут, но по какой-то причине я не могу получить доступ это из моего контроллера.

Вот часть сценария в моем представлении ветки:

 $(".month").click(function() {


            var click = $(this);

            var month = click.val();
            var year = $("#years").val();

            var url = "{{ path('av_platform_saisie') }}";

            $.ajax(url,
                {
                    type: 'POST',
                    data: { 'month': month, 
                            'year': year
                          },
                    success: function (data) {

                        alert('OK');
                    },
                    error : function(jqXHR, textStatus, errorThrown){}
                });

        });

И мой контроллер:

public function saisieAction(Request $request)
    {

        $user = $this->getUser();
        $thisyear = date("Y");

        $em = $this->getDoctrine()->getManager();

        // Create the form
        $form = $this->get('form.factory')->createBuilder(FormType::class)
            ->add('ndf', CollectionType::class, array(
                'entry_type' => NoteDeFraisType::class,
                'label' => false,
                'allow_add' => true,
                'allow_delete' => true,
            ))
            ->getForm();


        // if the form has been submited
        if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {

            if($request->isXMLHttpRequest()){

                $month = $request->get('month');
                $year = $request->get('year');
                $sub_date = $month .'/' .$year;

            }

            $notesDeFrais = $form['ndf']->getData();


            foreach ($notesDeFrais as $ndf) {
                $ndf->setUser($user);
                $ndf->setMonth($sub_date);
                $em->persist($ndf);
            }

            $em->flush();


        }


        return $this->render('AvPlatformBundle:Platform:saisie.html.twig',
            array(
                'year' => $thisyear,  'form' => $form->createView()
            ));
    }


Странная вещь: я пытался отправить мои переменные js из нового представления Twig, которое не отрисовывается моим контроллером, и оно прекрасно работает с точно таким же кодом, так что, возможно, это нормальное поведение?

EDIT: Я сделал некоторую отладку и на самом деле, и код внутри моего if($request->isXMLHttpRequest()) не выполняется

Ответы [ 4 ]

3 голосов
/ 31 мая 2019

Вы не используете правильный синтаксис для получения параметров, вот как это должно быть:

if($request->isXMLHttpRequest()) {
    $month=$request->request->get('month');
    $year=$request->request->get('year');
    $sub_date=$month .'/' .$year;
}

А если вы хотите получить GET параметры, это так:

$request->query->get('get_param');
0 голосов
/ 01 июня 2019

Поместите ваш URL в массив, переданный в ajax, например:

 $(".month").click(function() {
     var click = $(this);
     var month = click.val();
     var year = $("#years").val();

     $.ajax({
         url: "{{ path('av_platform_saisie') }}",
         type: 'POST',
         data: { 'month': month, 
                 'year': year
               },
         success: function (data) {
             alert('OK');
         },
         error : function(jqXHR, textStatus, errorThrown){}
     });
});
0 голосов
/ 31 мая 2019

Вы проверяли исходный код формы, каково значение атрибута action? Я думаю, что вы не можете добавить js url для этого запроса AJAX, как вы это сделали. В идеале установите FosJsRoutingBundle и измените как:

url: Routing.generate('av_platform_saisie')
0 голосов
/ 31 мая 2019

Вы должны правильно получить содержание запроса.

В зависимости от вашей версии Symfony, другие ответы могут не работать, и вам, возможно, придется использовать:

$ request-> getContent();

Чтобы иметь доступ к ассоциативному массиву, содержащему ваши данные.

(Изменить, чтобы добавить мой комментарий): Если это не сработает, единственное, что находится на моей голове, будетМожет быть, ваш автоимпорт IDE импортировал неправильный класс «Запрос» в вашем контроллере?Убедитесь, что вы используете -> использовать Symfony \ Component \ HttpFoundation \ Request;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...