2015-12-09 2 views
1

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

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'' будет достаточно или вы ищете более подробную информацию? – Artamiel

+0

@artamiel Я ищу дополнительные данные. Я хочу знать тип aswell –

+0

Я придумал решение для создания массива с ''bla' => 'text', 'submit' => 'submit'', если вам интересно. – Artamiel

ответ

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's 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); 
} 

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

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

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

$ форма-> получить ('бла') -> GetData()

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