有没有机会使控制器依赖于他们的服务,而不是通过使用它们中的服务容器,而是通过纯构造函数依赖注入?
我想以这种方式写控制器:
<?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执行控制器的新实例,而是通过简单的返回new $controller调用.
实际上推荐的是,如果你看到大多数第三方捆绑包,如FOSUser,你可以看到这正是他们所做的.
诀窍是将控制器定义为服务,然后使用服务标识而不是类名称.
http://symfony.com/doc/current/cookbook/controller/service.html
请记住,您将不得不注入所有需要的服务,例如实体管理员,您通常不会扩展symfony基类.当然,你可以注入完整的容器,但是往往会皱起眉头.