2013-08-05 2311 views
13

Tôi muốn thêm một danh sách đơn giản của các giá trị trong một tập tin cấu hình (config.yml). Ví dụ:Làm thế nào để thêm một mảng với các giá trị trong cấu hình Symfony2?

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

Khi thêm các nút để phân tích cú pháp cấu hình, nó chỉ đơn giản là thất bại:

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

Dưới đây là lỗi:

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

tôi đang thiếu gì? Điều này thậm chí có thể?

Trả lời

36

Nếu bạn muốn đạt được một nút như thế này, chỉ cần làm:

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

Gần. Tôi tìm thấy một câu hỏi khác đề cập đến phương pháp 'nguyên mẫu'. Trong trường hợp của tôi, nguyên mẫu phải giữ 'vô hướng' và nó hoạt động. –

+0

Tôi không hiểu những gì bạn đang cố gắng đạt được sau đó, sử dụng mã này 'var_dump ($ config);' = 'Array ( [columns] => Array ( [0] => col1 [1 ] => col2 ) ) ' – Touki

+1

Không nên có một' -> end() 'khác ngay sau' -> nguyên mẫu ('vô hướng') '? – liviucmg

0

Tôi nghĩ rằng bạn đang thiếu rằng YAML không phải là một ngôn ngữ đánh dấu, nó thậm chí không một langauge như vậy (Đó là chuẩn tuần tự hóa dữ liệu), vì vậy nó không biết bất kỳ cấu trúc ngôn ngữ nào, như mảng. Công cụ chính " của chúng tôi để diễn tả nhóm và mối quan hệ giữa các bit dữ liệu là khoảng trắng, dấu hai chấm và dấu gạch ngang.
Từ symfony documentation page of the YaML format:

my_bundle: 
    columns: 
     - col1 
     - col2 

Như tôi đã thu thập từ phần này:

tập tin Một YAML hiếm khi được sử dụng để mô tả một vô hướng đơn giản. Hầu hết thời gian, nó mô tả một bộ sưu tập. Bộ sưu tập có thể là một chuỗi hoặc ánh xạ các phần tử. Cả hai trình tự và ánh xạ được chuyển đổi thành mảng PHP.

Trình tự sử dụng một dấu gạch ngang theo sau là một không gian:

- PHP

- Perl

- Python

File YAML trước là tương đương với mã PHP sau:

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

'[" PHP "," Perl "," Python "]' tương đương với ký hiệu của bạn trong YAML. Và điều tôi hỏi là thực sự có thể khi Touki trả lời. Tất cả những gì bạn phải làm là chỉ rõ loại dữ liệu mà mảng chứa. Trong trường hợp chuỗi/vô hướng của tôi. –

+0

@ i.am.michiel: đã đọc sai câu hỏi trong trường hợp đó. Tôi nghĩ rằng '['col1', 'col2']' không hoạt động, bạn đã thử thiết lập rõ ràng kiểu đó chưa? '- !! str col1'? –

+0

Không sao cả. Và vấn đề phân tích cú pháp không nằm ở phía YAML mà ở phía Symfony.Tất cả những gì tôi phải làm là thêm một tùy chọn chuyển đổi trong trình phân tích cú pháp YAML như đã lưu ý trong câu trả lời của Loki. –