2013-01-08 19 views
8

Mam formularz dla mojej jednostki o nazwie Book i mam typ do wyświetlania formularza w moim widoku. W tym typie mam pewne pola, które są odwzorowane na właściwości w mojej encji.Jak dodać dodatkowe dane do formularza symfony 2

Teraz chcę dodać kolejne pole, które nie jest zmapowane w mojej jednostce i podać kilka początkowych danych dla tego pola podczas tworzenia formularza.

mój typ wygląda to

// BookBundle\Type\Book 
public function buildForm(FormBuilderInterface $builder, array $options = null) 
{ 
    $builder->add('title'); 
    $builder->add('another_field', null, array(
     'mapped' => false 
    )); 
} 

Formularz jest tworzony jak ten

$book = $repository->find(1); 
$form = $this->createForm(new BookType(), $book); 

Jak mogę podać kilka danych początkowych teraz podczas tworzenia formularza? Lub w jaki sposób muszę zmienić to tworzenie formularza, aby dodać dane początkowe do pola another_field?

+0

Co masz zamiar robić z polem nie odwzorowanym do jednostki? – simshaun

+0

Chcę uzyskać przesłane dane z formularza lub żądania i przetworzyć dane ręcznie. –

Odpowiedz

29

Mam również formularz, który zawiera pola, które najczęściej pasują do uprzednio zdefiniowanej jednostki, ale jedno z pól formularza ma zmapowany zestaw do wartości false.

Aby obejść ten problem w sterowniku, można nadać mu pewne wstępne dane dość łatwo tak:

$product = new Product(); // or load with Doctrine/Propel 
$initialData = "John Doe, this field is not actually mapped to Product"; 
$form = $this->createForm(new ProductType(), $product); 
$form->get('nonMappedField')->setData($initialData); 

proste. Wtedy, gdy jesteś przetwarzania danych formularza, aby uzyskać gotowy, aby go zapisać, można uzyskać dostęp do danych non-odwzorowany z:

$form->get('nonMappedField')->getData(); 
+0

Przydatna wskazówka: gdy niezamapowane pole, które chcesz wypełnić, samo w sobie jest podformularzem, musisz połączyć w łańcuchy wywołania 'get()': $ form-> get ('nonMappedSubForm') -> get ('subFormField') -> setData (...) '. – Ninj

+0

Szukał sposobu na odzyskanie danych z dodatkowego pola. $ form-> get ('nonMappedField') -> getData(); Dzięki –

5

Jedna sugestia może być dodanie argument konstruktora (lub setter) na swojej BookType który zawiera dane „another_field”, aw argumentów dodać, ustawiony parametrem „dane”:

class BookType 
{ 
    private $anotherFieldValue; 

    public function __construct($anotherFieldValue) 
    { 
     $this->anotherFieldValue = $anotherFieldValue; 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options = null) 
    { 
     $builder->add('another_field', 'hidden', array(
      'property_path' => false, 
      'data' => $this->anotherFieldValue 

     )); 
    } 
} 

Następnie budowę :

$this->createForm(new BookType('blahblah'), $book); 
+0

Dzięki za odpowiedź. Znalazłem inny elegancki sposób robienia tego. Opublikuje odpowiedź za minutę. –

2

można zmienić parametry żądania jak to wspieranie formularz z dodatkowymi danymi:

$type = new BookType(); 

$data = $this->getRequest()->request->get($type->getName()); 
$data = array_merge($data, array(
    'additional_field' => 'value' 
)); 

$this->getRequest()->request->set($type->getName(), $data); 

W ten sposób formularz wypełni prawidłowe wartości dla pola podczas renderowania. Jeśli chcesz dostarczyć wiele pól, może to być opcja.

+0

To lepiej! Miły. – Mike

Powiązane problemy