2017-10-02 1 views
1

ich ein Formulartyp wie geschaffen haben unterSymfony die Werte für Form, die bereits als Formulartyp erstellt

/** 
* Class CreatePosFormType. 
*/ 
class CreatePosFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name', TextType::class, [ 
      'required' => true, 
      'constraints' => [new NotBlank()], 
     ]); 
     $builder->add('identifier', TextType::class, [ 
      'required' => true, 
      'constraints' => [new NotBlank()], 
     ]); 
     $builder->add('description', TextType::class, [ 
      'required' => false, 
     ]); 
     $location = $builder->create('location', LocationFormType::class, [ 
      'constraints' => [new NotBlank(), new Valid()], 
     ]); 
     $location->addModelTransformer(new LocationDataTransformer()); 
     $builder->add($location); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults([ 
      'data_class' => Pos::class, 
     ]); 
    } 
} 

In meinem Controller Ich habe die Form erhalten und die Anfrage in das Formular senden, wie unten:

$form = $this->get('form.factory')->createNamed('pos', CreatePosFormType::class); 
$form->handleRequest($request); 

Aber ich brauche stattdessen die Anforderung an die Form des Sendens der Daten aus der Anforderung erhalten und die Werte für individuell ich habe wie unten versucht:

$ form-> get ('name') -> setData ('john');

Aber es setzt nicht den Wert des Formularfelds.

Wenn ich die Werte von bilden, über die folgenden Fehler occures

{ "form": { "Kinder": { "name": {}, "Bezeichner": { }, "description": {}, "location": {}, } }, "Fehler": []}

+0

Werfen Sie einen Blick auf diese http://symfony.com/doc/current/forms.html#handling-form-submissions – yceruto

+0

Was Symfony-Version? – ASOlivieri

+0

Ich benutze Symfony 3.2 – Tharunkumar

Antwort

1

Sie können die abgebildeten Klasse in das Formular senden selbst. Wie folgt:

public function createPost(Request $request) 
{ 
    $pos = new Pos(); 
    $pos->setName('John'); 
    $form = $this->get('form.factory')->createNamed('pos', CreatePosFormType::class, $pos); 

} 

Sie können Daten auch über die Optionen senden. Gefällt mir:

public function createPost(Request $request) 
{ 
    $form = $this->get('form.factory')->createNamed('pos', CreatePosFormType::class, null, ['yourVariable' => $yourVariable]); 

} 

Und in der Formularklasse würden Sie das in Ihren Optionen fangen.

class CreatePosFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $yourVariable = $options['yourVariable']; 
     //do stuff with your variable 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults([ 
      'data_class' => Pos::class, 
      'yourVariable' => null, 
     ]); 
    } 
+0

Aber meine Pos-Klasse hat nicht einige Variablen in der Form. Es verwendet Ereignis, um es in der Datenbank zu speichern – Tharunkumar

+0

Bearbeitete meine Antwort, um eine andere Option einzuschließen. – ASOlivieri

+0

"{ "form": { "Kinder": { "vorName": {}, "nachName": {}, "aktiv": {}, "E-Mail": {}, " phone ": {}, "Plain": {} } }, "Fehler": [] }" ich haben diese folgende Meldung, wie in der Tiefe debuggen – Tharunkumar

Verwandte Themen