2015-06-01 14 views
8

Utworzyłem formularz z doktryną. To działa, jeśli nie przechodzą żadnych opcji, na przykład:Formularz Symfony - Oczekiwany argument typu "string lub Symfony Component Form FormTypeInterface", "array" podany

$builder 
    ->add('name') 
    ->add('password', 'password') 
    ->add('password_repeat', 'password') 
    ->add('email', 'email') 
    ->add('save', 'submit') 
; 

Ale jeśli dodać tablicę z opcjami jak mówi docs (http://symfony.com/doc/current/book/forms.html#book-form-creating-form-classes), otrzymuję komunikat o błędzie, który mówi:

Oczekiwany argument typu "string lub Symfony \ Komponent \ Form \ FormTypeInterface", "tablica" podane

to formtype stworzony przez doktrynę:

<?php 

namespace MainBundle\Form; 

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

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

    $builder 
     ->add('name') //if I put ->add('name', array('label' => 'Your name')) I get the error 
     ->add('password', 'password') 
     ->add('password_repeat', 'password') 
     ->add('email', 'email') 
     ->add('save', 'submit') 
    ; 

} 

/** 
* @param OptionsResolverInterface $resolver 
*/ 
public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'MainBundle\Entity\User' 
    )); 
} 

/** 
* @return string 
*/ 
public function getName() 
{ 
    return 'mainbundle_user'; 
} 
} 

 

Odpowiedz

9

Musisz określić typ swojej dziedzinie przed dodaniem opcji

$builder->add('name', 'text', array('label' => 'Your name')) 
+1

Dziękujemy! Jestem nowy w symfony, więc zakładam, że to głupie pytanie, ale uratowałeś mi dzień! –

+7

To głupie, tylko jeśli nie pytasz – Med

4

Dla wersji Symfony 3+ powinno być,

$builder->add('name', TextType::class, array('label' => 'Your name')) 
Powiązane problemy