2012-12-14 54 views
7

Với Symfony2 TreeBuilder, có thể định cấu hình các nguyên mẫu cho mỗi nút bên trong một nút mảng, ví dụ: để hỗ trợ một cấu hình nhưCác nguyên mẫu lồng nhau trong Symfony2 Cấu hình

foo: 
    xxx: { foo: bar} 
    yyy: { foo: bar} 

Khi có bất kỳ số lượng xxx, yyy và vân vân (bất kỳ giá trị nào cả) các nút sử dụng một cấu trúc như

$rootNode 
    ->arrayNode('foo') 
    ->prototype('array') 
     ->children() 
      ->scalarNode('foo') 

Tôi muốn tạo ra một mức độ điều tương tự mà không giới thiệu một nút có tên khác ở giữa, ví dụ để hỗ trợ một cấu hình như

foo: 
    xxx: 
     aaa: { foo: bar} 
     bbb: { foo: bar} 
    yyy: 
     ccc: { foo: bar} 
     ddd: { foo: bar} 

nơi có thể có bất kỳ số lượng nút xxx, yyy và vv nào, mỗi nút có thể chứa bất kỳ số lượng nút aaa, bbb, v.v.

Có cách nào để đạt được điều này không? Gọi ->prototype() trực tiếp theo số ->children() của một cuộc gọi nguyên mẫu khác không hoạt động, vì các nguyên mẫu dường như không hỗ trợ các nguyên mẫu lồng nhau. Kết quả là tôi phải mã hóa các giá trị cụ thể cho xxx và yyy, hạn chế tính linh hoạt của gói mà tôi đang viết.

Trả lời

11

Đã kiểm tra trong symfony 2.2, công việc lồng.

Không sử dụng ->children() giữa lồng ->prototype():

$rootNode->children() 
    ->arrayNode('foo') 
     ->prototype('array') 
     ->prototype('array') 
      ->children() 
       ->scalarNode('foo'); 
+0

Bạn có biết lý do tại sao nó là bắt buộc để không sử dụng trẻ em trong trường hợp này? Chỉ cần tình cờ gặp vấn đề này, và nó có vẻ phù hợp để sử dụng trẻ em trong trường hợp này. – k0pernikus

+0

@ k0pernikus Tôi giả sử vì nguyên mẫu có nghĩa là bất kỳ số lượng yếu tố nào. –

Các vấn đề liên quan