8

AbstractType によって拡張された FormType からサービスにアクセスしようとしています。どうやってやるの?

ありがとう!

4

3 に答える 3

5

以前の回答/コメントに基づく完全な回答として:

フォーム タイプからサービスにアクセスするには、次のことを行う必要があります。

1)フォーム タイプをサービスとして定義し、必要なサービスを挿入します。

# 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) フォーム タイプ クラスで、コンストラクターに挿入します。

// 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();
        // ...
    }
}
于 2016-11-16T12:09:08.553 に答える
4

コンストラクターを介してフォームタイプに必要なサービスを注入するだけです。

class FooType extends AbstractType
{
    protected $barService;

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

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $this->barService->doSomething();
        // (...)
    }
}
于 2013-08-08T13:38:16.050 に答える
3

フォームタイプをサービスとして宣言する方法については、 sympfonyドキュメントのこのページを参照してください。そのページには、多くの優れたドキュメントと例があります。

Cyprian は正しい方向に進んでいますが、リンクされたページでは、フォーム タイプをサービスとして作成し、DI コンテナーにサービスを自動的に挿入させることで、さらに一歩進んでいます。

于 2013-08-08T13:42:05.673 に答える