Symfony, отправьте HTML-форму контроллеру с помощью ajax - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь отправить данные формы hmtl на контроллер с помощью AJAX, но контроллер не получает данные, как показывает ошибка.

html форма:

<form id="evento" name="evento" method="post" >     
      <div class="form-group">
        <label for="evento-titulo" class="col-form-label">Título:</label>
        <input type="text" class="form-control" id="evento_titulo" name="evento_titulo">
      </div>          
      <div class="form-group">
        <label for="evento_descripcion" class="col-form-label">Descripción:</label>
        <textarea class="form-control" id="evento_descripcion" name="evento_descripcion"></textarea>
      </div>          
      <div class="form-group">
        <label for="evento_inicio" class="col-form-label">Inicio:</label>
        <input type="datetime-local" class="form-control" id="evento_inicio" name="evento_inicio">
      </div>          
      <div class="form-group">
        <label for="evento_fin" class="col-form-label">Fin:</label>
        <input type="datetime-local" class="form-control" id="evento_fin" name="evento_fin">
      </div>              
      <div class="form-group">
        <label for="evento_checkmail" class="col-form-label">
             <input type="checkbox"  id="chkmail" name="chkmail" style="vertical-align:middle;">            
             Añadir correo  &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp
             Color:
             <input type="color"  id="color" name="color" style="vertical-align:middle;">

        </label>
        <input type="email" class="form-control" id="evento_mail" name="evento_mail" disabled="disabled">
      </div>

      <div class="modal-footer">
        <button type="button" class="btn btn-outline-danger" data-dismiss="modal">Cerrar</button>
        <button type="submit" class="btn btn-outline-success" id="save_event" name="save_event">Confirmar</button>
    </div>
    </form>

Передача данных формы в контроллер через ajax:

$("#evento").submit(function(){     
    var data = $('#evento').serialize();        
    $.ajax({ 
        type: "POST",
        data: data,
        url: {{ render( controller('CalendarBundle:Calendar:addEvent')) }},
        success: function(data) 
        {
            console.log($data);
            alert('OK');
        }  
    });         });

Контроллер:

public function addEventAction() {

    $em = $this->getDoctrine()->getManager();
    //fetch the POST Data

    $request = $this->get('request_stack')->getCurrentRequest();
    $data = $request->request->all();


    $evento = new Evento();


    $evento->setBeginat(new \DateTime($data["evento_inicio"]));
    $evento->setEndat(new \DateTime($data["evento_fin"]));
    $evento->setTitle($data["evento_titulo"]);
    $evento->setMail($data["evento_mail"]);
    $evento->setDescription($data["evento_descripcion"]);
    $evento->setColor($data["color"]);

    $em->persist($evento);
    $em->flush();

    //return response
    $serializedEntity = $this->container->get('serializer')->serialize($evento, 'json');
    $response = new Response($serializedEntity);
    $response->headers->set('Content-Type', 'application/json');
    return $response;

}}

Это сообщение об ошибке

Исключение былогенерируется во время рендеринга шаблона («Примечание: неопределенный индекс: evento_inicio»).

Ответы [ 3 ]

0 голосов
/ 18 мая 2019

Ваш Ajax-запрос отправляется в application/json типе контента, но ваш контроллер ожидает application/x-www-form-urlencoded.

Попробуйте json_decode() ing $request->getContent(), чтобы получить $data.

0 голосов
/ 18 мая 2019

Взгляните на этот пакет, чтобы управлять URL-адресом Symfony из javascript: https://github.com/FriendsOfSymfony/FOSJsRoutingBundle. И имейте в виду, что Javascript будет выполнен перед веткой.Я уверен, что отображаемая ошибка отображается при загрузке страницы.Удачи

0 голосов
/ 18 мая 2019

ваше свойство URL AJAX не очень хорошее, вам просто нужно вызвать URL (маршрут), связанный с действием контроллера addEventAction ().

Допустим, ваш маршрут для addEventAction - "/ event / add", затем введите url: "/event/add" или даже если у вас есть имя для этого маршрута, введите url: "{{ path('name_of_your_route') }}"

Свойство URL запроса AJAX должно быть действительным адресом, на который вы отправляете запрос: -)

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