Мы строим форму в реализации 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')))
;
}
}
Хорошо, как указано в моем комментарии, я покажу вам один способ создания массива с 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)
Это от меня, надеюсь, это поможет.
Чтобы получить данные из формы
$form-> получить ( 'бла') → GetData()
0 => 'bla', 1 => 'submit'
будет достаточно, или вы ищете более подробную информацию?