2015-10-26 35 views
12

Viene visualizzato il seguente errore quando si tenta di passare un'opzione al mio metodo buildForm in uno dei miei moduli.L'opzione non esiste errore quando si passa dall'opzione dal controller al modulo Symfony incorporato

L'opzione "numOfHoles" non esiste. Le opzioni definite sono: "azione", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "cascade_validation", "compound", "constraints", "csrf_field_name", "csrf_message", " csrf_protection "," csrf_provider "," csrf_token_id "," csrf_token_manager "," data "," data_class "," disabled "," empty_data "," error_bubbling "," error_mapping "," extra_fields_message "," inherit_data "," intention " , "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "max_length", "method", "pattern", "post_max_size_message", "property_path", "read_only", " richiesto "," translation_domain "," trim "," validation_groups "," virtual ".

Nel mio controller:

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

In crmpicco_course_row classe Form:

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

In crmpicco_course classe Form:

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

Qualcuno può vedere perché l'opzione numOfHoles non è p passando attraverso?

+0

È necessario aggiungere l'opzione 'numOfHoles' utilizzando la funzione' setDefaults' o 'setRequired' all'interno di' configureOptions (OptionsResolver $ resolver) 'del proprio generatore di moduli. –

risposta

16

Come avete scoperto, ogni tipo di forma ha un elenco predefinito di opzioni. L'aggiunta di una nuova opzione richiede una leggera regolazione. Il metodo attuale è cambiato nel corso dello sviluppo di Symfony, quindi potresti trovare alcune vecchie soluzioni ammortizzate.

più aggiornate La soluzione è discusso qui: http://symfony.com/blog/new-in-symfony-2-7-form-and-validator-updates#deprecated-setdefaultoptions-in-favor-of-configureoptions

Quindi, in pratica aggiungere

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

Per i tipi di forma e si dovrebbe essere a posto.

-1

Prova a fare questo:

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

poi:

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

allora avete bisogno di chiamare prima del vostro buildForm:

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