Получить поля формы из Symfony 2 AbstractType

1

Мы строим форму в реализации AbstractType. Теперь мы хотим получить поля, которые мы определили в builderForm. Я не мог найти документацию о том, как это сделать, хотя я ожидаю, что часть Symfony, которая отвечает за вывод формы, тоже должна это сделать.

class BlaType extends AbstractType {

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options) {


        $builder
                ->add('bla', 'checkbox', array('label' => 'bla', 'required' => true))
                ->add('submit', 'submit', array(
                    'label' => 'bla',
                    'attr' => array('class' => 'btn btn-primary')))
        ;
    }
}
  • 0
    Массива типа 0 => 'bla', 1 => 'submit' будет достаточно, или вы ищете более подробную информацию?
  • 0
    @artamiel Я ищу больше данных. Я хочу знать тип, а также
Показать ещё 2 комментария
Теги:

2 ответа

1
Лучший ответ

Хорошо, как указано в моем комментарии, я покажу вам один способ создания массива с name => type (думаю, может быть несколько способов, но на данный момент это будет трюк).

Я создал простую форму с большим количеством полей следующим образом:

<?php

namespace AppBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

class ArticleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title', 'text')
            ->add('description', 'textarea')
            ->add('isActive', 'checkbox')
            ->add('published', 'datetime')
            ->add('save', SubmitType::class)
        ;
    }
}

Тогда в контроллере важно ухватить в Form, например, как только вы создаете форму, как этот $builder = $this->createForm(new ArticleType());

Оттуда вы можете получить доступ к своим дочерним элементам:

public function indexAction(Request $request)
{
    $builder = $this->createForm(new ArticleType());
    // $builder -> Symfony\Component\Form\Form
    // It important to access the children array before the form is being normalized.
    // Otherwise you will gen an error as follows: FormBuilder methods cannot be accessed anymore once the builder is turned into a FormConfigInterface instance
    $fields = array();
    foreach($builder->all() as $name => $child) {
        // $child                           -> Symfony\Component\Form\Form
        // $child->getConfig()              -> Symfony\Component\Form\FormBuilder
        // $child->getConfig()->getType()   -> Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy
        $fields[ $name ] = $child->getConfig()->getType()->getName();
    }

    var_dump($fields);
}

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

array (size=5)
  'title' => string 'text' (length=4)
  'description' => string 'textarea' (length=8)
  'isActive' => string 'checkbox' (length=8)
  'published' => string 'datetime' (length=8)
  'save' => string 'submit' (length=6)

Это от меня, надеюсь, это поможет.

0

Чтобы получить данные из формы

$form-> получить ( 'бла') → GetData()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню