Это мой первый проект с Symfony2, и я пытаюсь сохранить объект с ajax. Вот некоторые примеры кода:Проверка формы symfony2 с помощью ajax
маршрутизации
...
version_ajax_create:
path: /ajax-create
defaults: { _controller: "CustomNameBundle:Version:ajax" }
methods: POST
...
Контроллер
public function ajaxAction()
{
$request = $this->get('request');
$em = $this->getDoctrine()->getManager();
$entity = new Version();
// Get data from ajax
$project_id = $request->request->get('project_id', 'null');
// Get project and pass it to the entity
$project = $em->getRepository('CustomNameBundle:Project')->find(array(
'id' => $project_id
));
$entity->setProject($project);
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
$response = array('success' => true);
} else {
$response = array('success' => false);
}
return new JsonResponse($response);
}
вид
$('#add_new_version').on('click', function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '{{ path('version_ajax_create') }}',
dataType: 'json',
data: { 'project_id': '{{ entity.id }}' }
})
.done(function(data) {
alert('success!')
console.log(data);
})
.fail(function(data) {
alert('fail!')
console.log(data);
});
});
Т сам объект Version имеет идентификатор (автогенерированный), дату создания и изменения (с обратными вызовами жизненного цикла) и связанный идентификатор проекта (отношение много к одному).
Я пытаюсь создать новую версию, просто передающую идентификатор проекта.
Я думаю, что проблема возникла из этой линии
$form->handleRequest($request);
Он ожидает сериализованный $ запроса не только JSON OBJ.
Если я отключу проверку формы и сохраняю ее, то она будет успешно сохранена, но я не уверен, что это хорошая практика.
Любая помощь или совет, как действовать в этой ситуации?
Идентификатор проекта - это поле в форме. Я пробовал свой код, но он также не работает ... На самом деле я считаю, что моя концепция создания и отправки формы неверна (и, возможно, проверка не выполняется из-за скрытых входов, которые symfony2 создает в форме). Я удалил элементы формы и проверку и добавил инструкцию try-catch для проверки успешного сохранения объекта. Я уверен, что это не очень хорошая практика, и любые другие идеи будут высоко оценены. – nevermind