2016-09-28 33 views
8

Chcę zdefiniować schemat konfiguracji dla mojej klasy i zastąpić go wybranymi przez administratora. W tym celu potrzebuję formularza do przechwytywania danych od administratora.Jak dynamicznie budować formularz na podstawie obiektu TreeBuilder?

W Symfony Configuration Component za zdefiniowanie schematu konfiguracji odpowiada klasa TreeBuilder. i jak wiesz Form Component ma strukturę podobną do drzewa podobną do TreeBuilder.

W jaki sposób można dynamicznie utworzyć obiekt Form na podstawie instancji Form?

+0

Możesz użyć 'formBuilder' do dynamicznego budowania formularza na podstawie prawa wyjściowego' treeBuilder'? – Rvanlaak

+0

Jak to jest możliwe w sposób automatyczny? –

Odpowiedz

1

Twój konstruktor drzewa, lub jego część, będzie musiał być iterowalny. Zatem, pozwalając mu reprezentować formularz tak ściśle, jak to tylko możliwe, można go użyć do łatwego odwzorowania konfiguracji na konstruktora. Byłoby to najłatwiejsze w użyciu formatu na yml:

form: 
    name: 'exampleForm' 
    path: 'target_path' 
    fields: 
     fieldName: 
      type: 'TextType' 
      attr: 
       # some additional options 
     otherFieldName: 
      type: 'TextType' 
      attr: 
       # some additional options 

Zobacz sekcję przetwarzania elementu konfiguracji, aby uzyskać więcej informacji: http://symfony.com/doc/current/components/config/definition.html#processing-configuration-values

Przetworzony konfiguracja to może być obsługiwane z fabryki formy i prawdopodobnie wyglądać to:

$config = $configuration->processConfiguration($config, FormType::class, null, $config['path']); 
$formBuilder = $container->get('form.factory')->createNamedBuilder($config['name'); 

foreach ($config['fields'] as $field) { 
    $formBuilder->add($fieldName, $field['type'], $field['attr']); 
} 
$form = $formBuilder->createForm();