Creative Commons License
This work is licensed under a
Creative Commons
Attribution-Share Alike 3.0
Unported License.

Master Symfony2 fundamentals

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).
trainings.sensiolabs.com

Symfony hosting done right

ServerGrove, outstanding support at the right price for your Symfony hosting needs.
servergrove.com

Discover the SensioLabs Support

Access to the SensioLabs Competency Center for an exclusive and tailor-made support on Symfony
sensiolabs.com

Tipo di campo choice

Tipo di campo choice

Un campo multi-funzione, usato per consentire all'utente di scegliere una o più opzioni. Può essere reso come tag select, bottone radio o checkbox.

Per usare questo campo, bisogna specificare l'opzione choice_list oppure l'opzione choices.

Reso come può essere vari tag (vedere sotto)
Opzioni
Opzioni ereditate
Tipo genitore form (con expanded), altrimenti field
Classe ChoiceType

Esempio di utilizzo

Il modo più facile per usare questo campo è specificare le scelte direttamente con l'opzione choices. La chiave dell'array diventa il valore effettivamente impostato nel proprio oggetto (p.e. m), mentre il valore è quello che l'utente vede nel form (p.e. Maschio).

1
2
3
4
$builder->add('gender', 'choice', array(
    'choices'   => array('m' => 'Maschio', 'f' => 'Femmina'),
    'required'  => false,
));

Impostando multiple a true, si consente all'utente la scelta di più valori. Il widget sarà reso come un un tag select con opzione mutliple oppure come una serie di checkbox, a seconda dell'opzione expanded:

1
2
3
4
5
6
7
8
$builder->add('availability', 'choice', array(
    'choices'   => array(
        'morning'   => 'Mattina',
        'afternoon' => 'Pomeriggio',
        'evening'   => 'Sera',
    ),
    'multiple'  => true,
));

Si può anche usare l'opzione choice_list, che accetta un oggetto che può specificare le scelte per il widget.

Tag select, checkbox o bottoni radio

Questo campo può essere reso come uno tra diversi campi HTML, a seconda delle opzioni expanded e multiple:

tipo di elemento expanded multiple
tag select false false
tag select (con attributo multiple) false true
bottoni radio true false
checkbox true true

Opzioni del campo

choices

tipo: array predefinito: array()

Questo è il modo più semplice per specificare le scelte da usare per questo campo. L'opzione choices è un array, in cui le chiavi sono il valore dell'oggetto e i valori sono l'etichetta:

1
2
3
$builder->add('gender', 'choice', array(
    'choices' => array('m' => 'Maschio', 'f' => 'Femmina')
));

choice_list

tipo: Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface

Questo è un modo per specificare le opzioni da usare per questo campo. L'opzione choice_list deve essere un'istanza di ChoiceListInterface. Per classi avanzate, si può creare una classe personalizzata che implementi questa interfaccia e fornisca le scelte.

multiple

tipo: booleano predefinito: false

Se true, l'utente potra selezionare più opzioni (invece di sceglierne una sola). A seconda del valore dell'opzione expanded, sarà reso o come un tag select o come dei checkbox, se true, e come un tag select o bottoni radio, se false. Il valore restituito sarà un array.

expanded

tipo: booleano predefinito: false

Se true, saranno resi dei bottoni radio o dei checkbox (a seconda del valore di multiple). Se false, sarà reso un elemento select.

preferred_choices

tipo: array predefinito: array()

Se questa opzione viene specificata, un sotto-insieme di tutte le opzioni sarà spostato in cima al select. Il codice seguente sposterà l'opzione "Paperino" in cima, con un separatore visuale tra essa e le opzioni restanti:

1
2
3
4
$builder->add('scelte_pippo', 'choice', array(
    'choices' => array('pippo' => 'Pippo', 'pluto' => 'Pluto', 'paperino' => 'Paperino'),
    'preferred_choices' => array('paperino'),
));

Si noti che le scelte preferite hanno senso solo con la resa di un elemento select (cioè se expanded è false). Le scelte preferite e le scelte normali sono separate visivamente da una serie di righe (-------------------). Il separatore può essere personalizzato durante la resa:

  • Twig
    1
    {{ form_widget(form.scelte_pippo, { 'separator': '=====' }) }}
    
  • PHP
    1
    <?php echo $view['form']->widget($form['scelte_pippo'], array('separator' => '=====')) ?>
    

empty_value

tipo: stringa o booleano

Questa opzione determina se apparirà o meno una speciale opzione vuota (p.e. "Scegliere un'opzione") in cima al select. Questa opzione si applica solamente se entrambe le opzioni expanded e multiple sono impstate a false.

  • Aggiungere un valore vuoto con "Scegliere un'opzione" come testo:

    1
    2
    3
    $builder->add('states', 'choice', array(
        'empty_value' => 'Scegliere un\'opzione',
    ));
    
  • Non mostrare alcun valore vuoto:

    1
    2
    3
    $builder->add('states', 'choice', array(
        'empty_value' => false,
    ));
    

Se non si imposta l'opzione empty_value, sarà aggiunta automaticamente un'opzione vuota (senza testo), ma solo se l'opzione required è false:

1
2
3
4
// sarà aggiunta un'opzione vuota (senza testo)
$builder->add('states', 'choice', array(
    'required' => false,
));

empty_data

tipo: mixed predefinito: array() se multiple o expanded, '' altrimenti

Questa opzione determina il valore restituito dal campo quando viene selezionato empty_value.

Per esempio, se si vuole che il campo gender sia impostato a null quando non viene scelto alcun valore, lo si può fare in questo modo:

1
2
3
4
5
6
7
8
9
$builder->add('gender', 'choice', array(
    'choices' => array(
        'm' => 'Maschio',
        'f' => 'Femmina'
    ),
    'required'    => false,
    'empty_value' => 'Scegliere un genere',
    'empty_data'  => null
));

by_reference

tipo: Booleano predefinito: true

Se il valore sottostante a un campo è un oggetto e questa opzione è true, l'oggetto risultante non sarà effettivamente impostato al bind del form. Per esempio, se si ha un campo author nell'oggetto sottostante, istanza di una classe Author, allora se by_reference è false, l'oggetto Author sarà aggiornato con i dati sottostanti, ma setAuthor non sarà effettivamente richiamata sull'oggetto principale. Poiché l'oggetto Author è un riferimento, questo fa veramente differenza solo se si ha nel metodo setAuthor una logica personalizzata, che si vuol essere sicuri sia eseguita. In questo caso, impostare questa opzione a false.

Opzioni ereditate

Queste opzioni sono ereditate dal tipo field:

required

tipo: booleano predefinito: true

Se true, sarà reso un attributo required HTML5. La label corrispondente sarà anche resa con una classe required.

L'attributo è indipendente dalla validazione del form. Nel caso migliore, se si lascia che Symfony indovini il tipo di campo, il valore di questa opzione sarà indovinato dalle informazioni di validazione.

label

tipo: stringa predefinito: "indovinato" dal nome del campo

Imposta la label usata per la resa del campo. La label può anche essere inserita direttamente all'interno del template:

1
{{ form_label(form.name, 'Il tuo nome') }}

read_only

tipo: booleano predefinito: false

Se questa opzione è true, il campo sarà reso con l'attributo disabled, in modo che il campo non sia modificabile.

disabled

New in version 2.1: L'opzione disabled è stata aggiunta nella versione 2.1

type: booleano default: false

Se non si vuole che l'utente modifichi il valore di un campo, si può impostare questa opzione a true. Ogni valore inserito sarà ignorato.

error_bubbling

tipo: booleano predefinito: false

Se true, qualsiasi errore per questo campo sarà passato al campo genitore o al form. Per esempio, se impostato a true su un campo normale, qualsiasi errore per il campo sarà collegato al form principale, non al campo stesso.