2012-02-18 12 views

risposta

5

È possibile farlo utilizzando Form Events.

+0

Grazie, sembra la soluzione di cui ho bisogno. – DavidW

2

Credo che si dovrebbe aggiungere un'opzione booleana al modulo, e impostare nel vostro controller. In questo modo avresti una separazione M (V) C pulita.

+0

Questa potrebbe essere una buona opzione. Mi chiedo semplicemente perché non c'è la funzione -> add() disponibile in FormType – DavidW

+0

Ciao David, sembra che abbia aggiunto quello in 2.2 http://api.symfony.com/2.2/Symfony/Component/Form/FormInterface.html# method_add – Acyra

4

Sicuro È possibile aggiungere campi dinamicamente utilizzando Tipo di raccolta nel modulo. Vedere il link sottostante, questo vi aiuterà a rendere i campi dinamicamente.

Link1: Dynamic Field in Symfony2

Link2: Form Collection in symfony2 doc

auguriamo che questi due link che aiuta. Felice codifica ..

+0

collezioni? Non sono sicuro se questo è quello che sto cercando. – DavidW

7

Diciamo che avete un modulo di tipo FileType come segue:

<?php 
namespace EventFlowAnalyser\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class FileType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name', 'text', array('label' => 'Name')); 
    } 

    public function getName() 
    { 
     return 'file'; 
    } 
} 

Si può usare nel controller come questo:

$form = $this->createForm(new FileType(), $document); 

Dove $ documento è un oggetto contenente un campo (nome). Ora, se è necessario aggiungere un campo all'oggetto modulo in un'altra funzione, è possibile estendere lo FileType per aggiungere il campo necessario; per esempio se vuoi modificare il campo del nome ma vuoi comunque tenere traccia dello stato precedente, aggiungi un campo original_name.

<?php 
namespace EventFlowAnalyser\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

use EventFlowAnalyser\Form\EventListener\EditFileFieldSubscriber; 

class FileEditType extends FileType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 
     $builder->add('original_name', 'hidden', array('mapped' => false)); 
    } 
} 

Ora, è possibile utilizzare il modulo esteso così:

$form = $this->createForm(new FileEditType(), $document); 

e modificare il valore del campo così:

$form->get('original_name')->setData($document->name); 

Spero che questo vi aiuterà somenone: o)

Problemi correlati