7

サービス (作成したサービス) をコントローラーに挿入するにはどうすればよいですか? セッター注入で十分です。

<?php
namespace MyNamespace;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class MyController extends Controller
{
    public function setMyService(MyService $myService)
    {
        $this->myService = $myService;
    }

    public function indexAction()
    {
        //Here I cannot access $this->myService;
        //Because the setter is not called magically!
    }
}

そして私のルート設定:

// Resources/routing.yml
myController_index:
    pattern:  /test
    defaults: { _controller: "FooBarBundle:MyController:index" }

別のバンドルでサービスを設定しています:

// Resources/services.yml 
parameters:
   my.service.class: Path\To\My\Service

services:
    my_service:
        class: %my.service.class%

ルートが解決されると、サービスは注入されません (そうすべきではないことはわかっています)。yml ファイルのどこかに設定する必要があると思います。

    calls:
        - [setMyService, [@my_service]]

このコントローラーをサービスとして使用しているのではなく、リクエストを処理する通常のコントローラーです。

編集: この時点で、 $this->container->get('my_service'); でサービスを取得しています。しかし、私はそれを注入する必要があります。

4

4 に答える 4

7

コントローラーにサービスを注入する場合は、コントローラーを services として定義する必要があります。

また、JMSDiExtraBundle のコントローラーの特別な処理を確認することもできます — 問題が解決する場合。しかし、私はコントローラーをサービスとして定義しているので、試していません。

于 2013-09-03T16:32:37.937 に答える
6

JMSDiExtraBundleを使用する場合、コントローラーをサービスとして定義する必要はありません(@elnur とは異なり)。コードは次のようになります。

<?php

namespace MyNamespace;

use JMS\DiExtraBundle\Annotation as DI;
use Path\To\My\Service;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class MyController extends Controller
{
    /**
     * @var $myService Service
     *
     * @DI\Inject("my_service")
     */
    protected $myService;

    public function indexAction()
    {
        // $this->myService->method();
    }
}

メソッドの記述を避けるため、このアプローチは非常に優れていると思います__construct()

于 2014-10-21T13:37:57.343 に答える
0

コントローラーをサービスとして定義したくない場合は、kernel.controllerイベントにリスナーを追加して、実行直前に構成することができます。このようにして、セッターを使用してコントローラー内に必要なサービスを注入できます。

http://symfony.com/doc/current/components/http_kernel/introduction.html#component-http-kernel-kernel-controller

于 2013-09-05T21:59:41.307 に答える