2016-09-30 6 views
1

Итак, я начинаю изучать Symfony. Похоже, это довольно классная платформа, но некоторые понятия по-прежнему размыты ко мне, поэтому, пожалуйста, извините мой вопрос, который может показаться глупым для некоторых из вас.Symfony - несколько форм того же типа

Так что я хочу сделать страницу, где мой пользователь сможет добавить несколько экземпляров одного и того же объекта на той же странице (скажем, 5), поэтому он похож на страницу «Добавить элементы в bash» (вроде как phpMyAdmin insert data page, где вы можете добавить несколько строк на одну страницу).

Я создал свой FormType из моего объекта, и все работает нормально, когда я хочу добавить 1 объект, но я понятия не имею, как обрабатывать несколько вложений объектов.

Я пробовал использовать FormCollection без каких-либо успехов (извините, я удалил свой код, чтобы не показать, что я пробовал ...). Я также попытался создать 5 разных форм с циклом и изменить только их имена, но я понятия не имею, как их обрабатывать.

Если кто-то может показать мне дорогу, это было бы очень приятно от вас! Заранее спасибо!

P.S Я использую Symfony 3.1.4

+0

CollectionType - это именно то, что вам нужно. Просто отправьте данные контроллеру и пропустите массив, чтобы вставить записи в базу данных. –

ответ

0

Если вы вставляете одну форму в другую, вы можете добавить столько форм, сколько хотите. Таким образом, если первая форма создает объект ... Например:

Бланк лица:

// src/AppBundle/Form/TaskType.php 
namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class TaskType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name') 
      ->add('task'); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Task', 
     )); 
    } 
} 

форма контейнера, что позволяет много форм, которые будут добавлены:

// src/AppBundle/Form/ProjectType.php 
namespace AppBundle\Form; 

use src/AppBundle/Form/TaskType.php 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\Form\Extension\Core\Type\CollectionType; 

class ProjectType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('tasks', CollectionType::class, array(
      'entry_type' => TaskType::class, 
      'allow_add' => true // <- don't forgot this part :) 
     )) 
     ->add('save', SubmitType::class); 
    } 
} 

Вы будете необходимо подключить форму контейнера к некоторому JavaScript, чтобы вы могли динамически добавлять дополнительные формы сущностей. Это described in detail in this cookbook article. Кроме того, справедливое предупреждение: это было навязано сонным, ленивым мозгом и поставляется непроверенным и, вероятно, не функциональным. Но это должно поставить вас на правильный путь: D удачи!

+1

Итак, я сел более сосредоточенно, чем вчера, и на самом деле я был на хорошем треке, используя CollectionForm. Используемые прототипы и все, чтобы динамически добавлять форму на мою страницу, и она отлично работает! Ваш маленький кусок кода действительно помог мне начать! Благодаря! – RaphBlanchet

0

ваше требование, кажется, ваши формы не велики. Итак, вы должны использовать AJAX для этого.

Загрузите одну форму, но передайте ее с помощью ajax, при успешном выполнении. Ваш контроллер должен ответить другой свежей формой через JsonResponse. Таким образом, пользователю не нужно заполнять всю форму, но получает то, что ему нужно, с более удобной пользой.

Надеюсь, это поможет!

Смежные вопросы