Форма недействительна в Symfony2

Пытаюсь обработать форму в Symfony2, все значения из нее получаю в контроллере, но при вызове:

$form->isValid()

он возвращает ложь. Я пытаюсь обработать форму в другом контроллере.

Форма отображается в виде двух частей: сначала некоторые личные данные, а затем дополнительная информация, но в событии отправки формы я объединяю все значения, сериализующие формы. Вот как я отображаю форму в представлении:

<form id="myform" action="{{ path('_process_my_form') }}" {{ form_enctype(form) }} method="POST">
  {{ form_errors(form) }}
  {{ form_widget(form._token) }}
  {{ form_widget(form.first_name, {'attr': {'class': 'form-control'}} ) }}
  ... // then I render the rest of the personal information widgets
  <button type="submit" class="btn btn-info btn-block">Submit</button>
</form>

<form id="myform2">
  {{ form_widget(form.job_name, {'attr': {'class': 'form-control'}} ) }}
  ... // then I render the rest of the widgets (not personal information)
</form>

Затем в запросе Ajax я объединяю две формы следующим образом:

$("#my_form").submit(function(e) {
  e.preventDefault();
  $.ajax({
    type: e.target.method,
    url: e.target.action,
    data: $("#my_form").serialize() + $("#my_form2").serialize(),
    beforeSend: function( xhr ) {},
    success: function(data) {
      //do something...
    }
  });
});

Мое правило _process_my_form выглядит так:

_process_my_form:
    pattern:   /ajax/process-my-form
    defaults:  { _controller: MyBundle:User:processMyForm }

Это контроллер, который управляет запросом Ajax:

public function processMyFormAction(Request $request)
{
  if ($request->isMethod('POST')) 
  {
    $myEntity = new myEntity();
    $form = $this->container->get('form.factory')->create(new myFormType(), $myEntity);
    $form->bind($request);
    if ($form->isValid()) 
    {
      //Process the form... this code is never excecuted :(
    }
  }
}

Я делаю что-то неправильно???

Спасибо!!!


person relez    schedule 04.06.2014    source источник


Ответы (1)


Начиная с Symfony 2.3, я считаю, что они изменили дескриптор формы с

$form->bind($request);

to

$form->handleRequest($request);

Однако я не уверен, что первый все еще поддерживается? Насколько я вижу, метод привязки больше не существует в интерфейсе формы.

Вы можете прочитать больше здесь Symfony Cookbook — Form Direct Submit

person jonupton    schedule 04.06.2014
comment
Кроме того, вы не можете отправить две формы таким образом. Вам нужно будет заключить все входные данные формы в один и тот же набор тегов формы. - person jonupton; 04.06.2014
comment
Спасибо за ответ, я проверю его, когда вернусь домой, но самое интересное, что я могу получить все значения из обеих форм в моем контроллере, а также я проигнорировал $form-›isValid() и попытался хранить значения в базе данных и работало! Итак, я дам вам знать, когда проверю ваш ответ. Спасибо! - person relez; 04.06.2014