Ich versuche auf einen Dienst von einem FormType zuzugreifen, der von AbstractType erweitert wird. Wie kann ich das machen?Zugriff auf andere Dienste in einem Symfony FormType?
Danke!
Ich versuche auf einen Dienst von einem FormType zuzugreifen, der von AbstractType erweitert wird. Wie kann ich das machen?Zugriff auf andere Dienste in einem Symfony FormType?
Danke!
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();
// (...)
}
}
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.
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();
// ...
}
}
Sie müssen das neue Argument auch zur FormType-Deklaration in der services-Datei hinzufügen, z. in services.yml – dxvargas
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