13

コントローラをサービスに依存させる機会はありますか?純粋なコンストラクタの依存関係注入を使用するのではありませんか?Symfony 2:コントローラの依存性注入(DI)

私は、このようにコントローラを書きたいと思います:

<?php 

class ArticleController extends \Symfony\Bundle\FrameworkBundle\Controller\Controller 
{ 
    private $articleFacade; 
    private $articleRepository; 

    public function __construct(ArticleFacade $articleFacade, ArticleRepository $articleRepository) 
    { 
     $this->articleFacade = $articleFacade; 
     $this->articleRepository = $articleRepository; 
    } 

    public function indexAction() 
    { 
     ... 
    } 

} 

生憎私はsymfonyのControllerResolverがないServiceContainer経由ではなく、単純なreturn new $controllerコールを経由してコントローラの新しいインスタンスをして見ることができるように。

答えて

12

実際には、実際にはお勧めします.FOSUserのようなサードパーティ製のバンドルを見ると、まさにそのことがわかります。

あなたのコントローラをサービスとして定義し、クラス名の代わりにサービスIDを使用するというのが難点です。

http://symfony.com/doc/current/cookbook/controller/service.html

あなたは、このようなエンティティマネージャなど、すべての必要なサービスを注入する必要がありますに注意してください、あなたは通常、symfonyの基本クラスを拡張しません。もちろん、あなたは完全な容器を注入することができますが、それはぶつかる傾向があります。

+0

ありがとうございます。 –

+1

私の[AbstractControllerBundle](https://github.com/elnur/ElnurAbstractControllerBundle)を見てください。これは、コントローラをサービスとして簡単に使用するための[親サービス](http://symfony.com/doc/current/cookbook/service_container/parentservices.html)を提供するためのものです。 –

+9

これはFOSUserのように私には見えませんか?私はポイントを逃していますか? Václavの質問はコンストラクタメソッドを介してそれらを注入することでしたが、FOSUserは$ this-> container-> get( 'service')を行いました。 https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Controller/RegistrationController.php – Steve