2015-10-26 5 views
12

Ich bekomme den folgenden Fehler beim Versuch, eine Option zu meiner Methode in einem meiner Formulare zu übergeben.Option existiert nicht Fehler beim Durchlaufen der Option vom Controller zum eingebetteten Symfony-Formular

Die Option "numOfHoles" existiert nicht. Definierte Optionen sind: "action", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "cascade_validation", "zusammengesetzte", "constraints", "csrf_field_name", "csrf_message", " csrf_protection "," csrf_provider "," csrf_token_id "," csrf_token_manager "," daten "," data_class "," deaktiviert "," empty_data "," error_bubbling "," error_mapping "," extra_fields_message "," inherit_data "," absicht " , "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "max_length", "methode", "muster", "post_max_size_message", "property_path", "read_only", " erforderlich "," translation_domain "," trim "," validation_groups "," virtual ".

In meinem Controller:

// hardcoded here for brevity in this example 
$form = $this->createForm('crmpicco_course_row', $courseRow, array('numOfHoles' => 18)); 

In crmpicco_course_row Form-Klasse:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('name', 'text') 
     ->add('course', 'crmpicco_course', array('numOfHoles' => $options['numOfHoles'])) 
    ; 
} 

In crmpicco_course Form-Klasse:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    for ($i = 0; $i < $options['numOfHoles']; $i++) { 
     $builder->add($i, 'text', array('required' => 'false')); 
    } 
} 

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

Kann jemand sehen, warum die Option numOfHoles nicht ist p durchblättern?

+0

Sie müssen die Option 'numOfHoles' hinzufügen, indem Sie die Funktion' setDefaults' oder 'setRequired' im' configureOptions (OptionsResolver $ resolver) 'Ihres Formular-Builders verwenden. –

Antwort

16

Wie Sie entdeckt haben, jeder Formulartyp hat eine vordefinierte Liste von Optionen. Das Hinzufügen einer neuen Option erfordert eine leichte Anpassung. Die tatsächliche Methode hat sich im Laufe der Symfony-Entwicklung geändert, so dass Sie auf einige ältere, abgeschriebene Lösungen stoßen können.

Die aktuellste Lösung wird hier diskutiert: http://symfony.com/blog/new-in-symfony-2-7-form-and-validator-updates#deprecated-setdefaultoptions-in-favor-of-configureoptions

So fügen Sie im Grunde

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AppBundle\Entity\Whatever', 
     'numOfHoles' => 0, 
    )); 

Um die Formulartypen und Sie sollten gut zu gehen.

-1

Versuchen, dies zu tun:

$numOfHoles = array('numOfHoles' => $options['numOfHoles'])); 

dann:

$oForm = $this->createForm(new CompanyForm($numOfHoles)); 

Dann müssen Sie es vor Ihrer buildForm nennen:

public function __construct($contacts)) 
{ 
$this->vnumOfHoles = $numOfHoles; 
}