Я создал форму, используя Symfony 2.4, которая не связана с какой-либо сущностью, потому что я хочу использовать только данные для создания отчета. Я создал форму, используя расширенный класс AbstractType, и мне нужно добавить несколько элементов, поскольку форма представляет собой счет. Я знаю об атрибуте allow_add, но он просто позволяет добавить поле в форму, и мне нужно сделать что-то, как я показываю на картинке:
Я понятия не имею о том, как это сделать, я создал класс элемента, и он содержит два атрибута, но я не нахожу никакой информации об этом. До сих пор вот что у меня есть:
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. На всякий случай знает как это сделать используя его.
В основном вам понадобятся 2 формы. Один, назовите это основной формой, а другой — для предмета. Затем вы можете встраивать тип формы элемента в основной тип формы несколько раз, используя тип коллекции. Вам также понадобится JavaScript для добавления и удаления элемента. Было бы очень долго записывать, как именно это сделать, но в документы.
Других решений пока нет …