Symfony控制器作为服务参数未注入

时间:2015-09-08 15:31:37

标签: symfony

我有这个控制器:

use Doctrine\Common\Persistence\ManagerRegistry;

class AjaxEntityController
{
    protected $registry;

    public function __construct(ManagerRegistry $registry)
    {
        $this->registry = $registry;
    }

    ...
}

这是我的services.yml:

services:
    tapir_form.ajax_entity_controller:
        class: Tapir\FormBundle\Controller\AjaxEntityController
        arguments: [ '@doctrine' ]

但是当我尝试访问此控制器时(通过它的URL),我收到此错误:

类型错误:传递给Tapir \ FormBundle \ Controller \ AjaxEntityController :: __ construct()的参数1必须实现接口Doctrine \ Common \ Persistence \ ManagerRegistry,没有给出,在/..../var/cache/dev/中调用第13行的jms_diextra / controller_injectors / TapirFormBundleControllerAjaxEntityController.php

我已经搜索过这个问题,发现很多情况下控制器没有被声明为服务或者参数参数丢失了,但这不是我的情况。

我清除了缓存,将@Route(service =" tapir_form.ajax_entity_controller")添加到我的控制器类中,以防万一。我当然有TapirFormExtension

$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');

如果从构造函数中删除强制参数,则服务正常工作(我的意思是调用控制器操作,没有例外)。 这是我第一次使用控制器作为服务。其他服务(如表单类型)也使用类似的配置。

我正在使用Symfony 2.7.3,PHP 5.6.13,Linux。

还有什么可能是错的?

提前致谢。

1 个答案:

答案 0 :(得分:0)

由于 Symfony 3.3 ,您可以使用自动装配:

# app/services/services.yml
services:
    Tapir\FormBundle\Controller\AjaxEntityController:
        autowire: true

或者对于更多控制器, PSR-4 service autodiscovery

# app/services/services.yml
services:
    _defaults:
        autowire: true

    Tapir\:
        resource: src/Tapir/{Controller}