2013-08-08 15 views

cevap

4

Oluşturucu aracılığıyla form türü için istediğiniz hizmetleri enjekte edin. Bir hizmet olarak form türü ilan etmek nasıl bir açıklaması için this page in the sympfony docs de

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

Ayrıca, yeni bağımsız değişkeni Hizmetler dosyasındaki FormType bildirimi olarak eklemeniz gerekir, ör. bu cevabı tam olarak çalışmak için services.yml – dxvargas

+0

içinde, form türünüz [hizmet olarak tanımlanmış olmalıdır] (http://symfony.com/doc/current/form/create_custom_field_type.html#creating-your-field- tip-olarak-a-hizmet) – ShinDarth

3

bak. Bu sayfada çok iyi dokümantasyon ve örnek var.

Cyprian doğru yolda, ancak bağlantılı sayfa form hizmetinizi bir hizmet olarak oluşturarak ve DI kapsayıcısının hizmeti otomatik olarak enjekte ederek bir adım daha ileriye götürür. önceki cevaplar/açıklamalara dayanarak tam bir cevap olarak

5

:

senin Formu Tipi Bir servise erişmek amacıyla, etmelisin:

1) Define your Form Type as a service ve içine gerekli hizmeti enjekte:

// 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(); 
     // ... 
    } 
} 
:

# 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) Şimdi form tipi sınıfında, yapıcı enjekte