在Symfony2控制器中使用构造函数

时间:2014-03-21 16:40:41

标签: symfony

我想在我的Symfony2控制器中使用构造函数,但是我有这个错误:

ContextErrorException: Catchable Fatal Error: Argument 1 passed to Acme\ApplicationBundle\Controller\CalendarActivityController::__construct() must implement interface Symfony\Component\DependencyInjection\ContainerInterface, none given, called in /Users/root/Documents/projects/Acme/Symfony/app/cache/dev/classes.php on line 2374 and defined in /Users/root/Documents/projects/Test/Symfony/src/Acme/ApplicationBundle/Controller/CalendarActivityController.php line 16

我的构造函数:

public function __construct(Container $container) {
    $this->container = $container;
}

我必须使用构造函数,因为有时候我使用我的控制器作为服务,在这种情况下,容器没有定义。

2 个答案:

答案 0 :(得分:1)

如果您的控制器本身已注册为服务,则可以将服务注入您的控制器。在官方文档中了解更多相关信息:http://symfony.com/doc/current/cookbook/controller/service.html

但是,我要指出,注入Container的价值不大。扩展Symfony\Component\DependencyInjection\ContainerAware要容易得多。 Symfony会自动为您注入容器(因为ContainerAware实现了ContainerAwareInterface)。

如果要注入特定服务,请将控制器注册为服务。

否则使用ContainerAware

答案 1 :(得分:0)

你必须使用依赖注入来调用容器使用USE

    use Symfony\Component\DependencyInjection\ContainerInterface as Container;
      private $container;

public function __construct(Container $container) {
        $this->container = $container;

    }