Symfony 2.4 - Добавление динамических полей в форму

Я создал форму с использованием Symfony 2.4, которая не связана с каким-либо объектом, потому что я хочу использовать данные только для создания отчета. Я создал форму, используя расширенный класс AbstractType, и мне нужно добавить несколько элементов, так как форма представляет счет. Я знаю об атрибуте allow_add, но он просто позволяет добавить поле в форму, и мне нужно сделать что-то вроде того, что показано на изображении:

formulario

Я вообще понятия не имею, как это сделать, я создал класс элемента, и он содержит два атрибута, но я нигде не нахожу информации об этом. До сих пор это то, что у меня есть:

namespace Abadia\FacturaBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;>

class ReciboCajaType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('ciudad', 'text')
            ->add('fecha', 'date')
            ->add('valor', 'number')
            ->add('recibi_de', 'text')
            ->add('suma_recibida', 'number')
            ->add('suma_letras', 'textarea')
            ->add('bloque', 'text')
            ->add('numero', 'text')
            ->add('descripcion', 'textarea')
            ->add('areas_comunes', 'number')
            ->add('cuota_extraordinaria', 'number')
            ->add('saldo', 'number')
            ->add('cheque', 'number')
            ->add('otros', 'number')
            ->add('efectivo', 'number')
            ->add('generar', 'submit')
        ;
    }

    public function getName()
    {
        return 'abadia_facturabundle_recibocajatype';
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array());
    }
}

Заранее спасибо.

ОБНОВЛЕНИЕ: я забыл упомянуть, что работаю с расширением Twig. На всякий случай знает, как это сделать с его помощью.


person 8370    schedule 20.02.2016    source источник
comment
Я бы сделал так: передал данные текущей формы в формате json на страницу. Если пользователь нажимает ссылку «Добавить новый элемент», отправьте ajax информацию о форме (информация в json) в нужный класс, добавьте новый элемент, верните новый json и дайте javascript снова создать форму. Вероятно, у вас возникнут проблемы с formkey (токеном), но это уже другая тема.   -  person paskl    schedule 21.02.2016


Ответы (1)


В основном вам понадобятся 2 формы. Одна, назовите ее основной формой, а другая форма для элемента. Затем вы можете вставлять тип формы элемента в основной тип формы несколько раз, используя тип коллекции. Вам также понадобится javascript для добавления и удаления элемента. Было бы очень долго расписывать, как именно это сделать, но хороший пример есть в документы.

person 1ed    schedule 20.02.2016
comment
Спасибо, я совершенно неправильно понял, как работают теги. - person 8370; 21.02.2016