2013-08-05 12 views
13

Vorrei aggiungere un semplice elenco di valori in un file di configurazione (config.yml). Per esempio:Come aggiungere un array con valori nella configurazione di Symfony2?

my_bundle: 
    columns: ["col1", "col2"] 

Quando si aggiunge il nodo al parser di configurazione, non riesce semplicemente:

$rootNode = $treeBuilder->root('my_bundle'); 
$rootNode->arrayNode('columns')->children()->end(); 

Ecco l'errore:

InvalidConfigurationException: Unrecognized options "0, 1" under "my_bundle.columns" 

Che cosa mi manca? È possibile?

risposta

36

Se si vuole raggiungere un nodo come questo, basta fare:

$rootNode 
    ->children() 
     ->arrayNode('columns') 
      ->prototype('scalar') 
      ->end() 
     ->end() 
    ->end() 
; 
+0

Quasi. Ho trovato un'altra domanda che menziona il metodo 'prototipo'. Nel mio caso, il prototipo deve contenere 'scalare' e ha funzionato. –

+0

Non capisco quello che stai cercando di raggiungere poi, usando questo codice 'var_dump ($ config);' '= Array ( [colonne] => Array ( [0] => col1 [1 ] => col2 ) ) ' – Touki

+1

Non dovrebbe esserci anche un altro' -> end() 'subito dopo' -> prototype ('scalare') '? – liviucmg

0

Penso che tu sia perdendo che YAML non è un linguaggio di markup, non è nemmeno un langauge in quanto tale (È uno standard di serializzazione dei dati), quindi non conosce alcun costrutto del linguaggio, come gli array. Il suo strumento principale " per esprimere il raggruppamento e le relazioni tra i bit di dati sono spazi bianchi, due punti e trattini.
Dal symfony documentation page of the YaML format:

my_bundle: 
    columns: 
     - col1 
     - col2 

Come ho capito da questa sezione:

file A YAML è raramente utilizzato per descrivere un semplice scalare. La maggior parte delle volte descrive una collezione. Una raccolta può essere una sequenza o una mappatura di elementi. Entrambe le sequenze e le mappature vengono convertite in array PHP.

sequenze usano un trattino seguito da uno spazio:

- PHP

- Perl

- Python

Il file YAML precedente è equivalente al seguente codice PHP:

array('PHP', 'Perl', 'Python'); 
+1

'[" PHP "," Perl "," Python "]' è equivalente alla notazione in YAML. E quello che stavo chiedendo è davvero possibile come Touki ha risposto. Tutto quello che devi fare è specificare quale tipo di dati contiene la matrice. Nel mio caso stringa/scalare. –

+0

@ i.am.michiel: in questo caso non ha letto la domanda. Ho pensato che '['col1', 'col2']' non funzionava, hai provato a impostare il tipo anche in modo esplicito? '- !! str col1'? –

+0

Nessun problema. E il problema di analisi non era sul lato YAML ma sul lato di Symfony.Tutto quello che dovevo fare era aggiungere un'opzione di conversione nel parser YAML come notato nella risposta di Loki. –

Problemi correlati