Symfony2 лучшая практика для сложных форм

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

Следовательно, мои формы также сложны: у меня может быть много связанных форм; например, «Кино» может иметь адрес, но также может быть связан с несколькими «фильмами» (с кнопкой для добавления нового фильма).

С этим очень трудно справиться, используя базовые типы форм Symfony2; Я предпочитаю создавать свою форму вручную в виде веточки ; используя кучу Javascript.

Но я не знаю, как справиться с отправкой формы?

  • Должен ли я определить CinemaType и использовать его только для обработки запроса формы (но не для создания представления формы)?
  • Должен ли я использовать createFormBuilder() в моем контроллере, чтобы определить основные поля формы и проверить их с помощью handleRequest() метод?
  • Или, наконец, следует получить все мои данные _POST и проверить их вручную ?

Спасибо 🙂

-6

Решение

Я не очень хорошо понимаю проблему …


Вы можете играть с несколькими вложенными формами и вся структура (HTML + JS) находится в документе:
http://symfony.com/doc/current/cookbook/form/form_collections.html

Официальный документ тоже дает jsfiddle: http://jsfiddle.net/847Kf/4/

Просто выписка для проверки правильности ответа:

function addTagForm($collectionHolder, $newLinkLi) {
// Get the data-prototype explained earlier
var prototype = $collectionHolder.data('prototype');

// get the new index
var index = $collectionHolder.data('index');

// Replace '$$name$$' in the prototype's HTML to
// instead be a number based on how many items we have
var newForm = prototype.replace(/__name__/g, index);

// increase the index with one for the next item
$collectionHolder.data('index', index + 1);

// Display the form in the page in an li, before the "Add a tag" link li
var $newFormLi = $('<li></li>').append(newForm);

// also add a remove button, just for this example
$newFormLi.append('<a href="#" class="remove-tag">x</a>');

$newLinkLi.before($newFormLi);

// handle the removal, just for this example
$('.remove-tag').click(function(e) {
e.preventDefault();

$(this).parent().remove();

return false;
});
}

Вы можете настроить рендеринг, или / и создаем собственную тему:
http://symfony.com/doc/current/cookbook/form/form_customization.html


Вы можете обрабатывать проверку формы :
http://symfony.com/doc/current/book/validation.html


И если вы хорошо разбираетесь в эргономике, вы можете создать красивую форму, разделенную на несколько вкладок или любой другой мыслимый дизайн …

1

Другие решения

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

  • handleRequest
  • утверждать
  • CreateView

И так далее.

0

По вопросам рекламы [email protected]