2013-08-08 12 views

Antwort

4

Fügen Sie einfach die gewünschten Dienste über den Konstruktor in den Formulartyp ein.

class FooType extends AbstractType 
{ 
    protected $barService; 

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

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $this->barService->doSomething(); 
     // (...) 
    } 
} 
+2

Sie müssen das neue Argument auch zur FormType-Deklaration in der services-Datei hinzufügen, z. in services.yml – dxvargas

+0

um diese Antwort voll funktionsfähig zu machen, sollte Ihr Formulartyp [definiert als ein Dienst] sein (http://symfony.com/doc/current/form/create_custom_field_type.html#creating-your-field- Typ-as-a-Service) – ShinDarth

3

Blick auf this page in the sympfony docs für eine Beschreibung, wie Sie Ihren Formulartyp als Service zu erklären. Diese Seite hat eine Menge guter Dokumentation und Beispiel.

Cyprian ist auf dem richtigen Weg, aber die verlinkte Seite geht noch einen Schritt weiter, indem Sie Ihren Formulartyp als Dienst erstellen und den DI-Container automatisch den Dienst injizieren lassen.

5

Als vollständige Antwort basierend auf früheren Antworten/Kommentare:

Um einen Dienst von Ihrem Formulartyp zugreifen zu können, müssen Sie:

1) Define your Form Type as a service und spritzen den benötigten Service hinein:

# src/AppBundle/Resources/config/services.yml 
services: 
    app.my.form.type: 
     class: AppBundle\Form\MyFormType # this is your form type class 
     arguments: 
      - '@my.service' # this is the ID of the service you want to inject 
     tags: 
      - { name: form.type } 

2) Jetzt in Ihrem Formulartyp Klasse, injizieren sie in den Konstruktor:

// src/AppBundle/Form/MyFormType.php 
class MyFormType extends AbstractType 
{ 
    protected $myService; 

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

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $this->myService->someMethod(); 
     // ... 
    } 
} 
Verwandte Themen