首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为未注入的服务参数的Symfony控制器

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

Stack Overflow用户
提问于 2015-09-08 15:31:36
回答 1查看 1.5K关注 0票数 2

我有一个控制器:

代码语言:javascript
复制
use Doctrine\Common\Persistence\ManagerRegistry;

class AjaxEntityController
{
    protected $registry;

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

    ...
}

这是我的services.yml:

代码语言:javascript
复制
services:
    tapir_form.ajax_entity_controller:
        class: Tapir\FormBundle\Controller\AjaxEntityController
        arguments: [ '@doctrine' ]

但是,当我试图访问这个控制器(通过它的URL)时,我会得到以下错误:

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

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

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

代码语言:javascript
复制
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');

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

我使用的是Symfony 2.7.3,PHP 5.6.13,Linux。

还有什么不对的?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-05-23 16:31:27

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

代码语言:javascript
复制
# app/services/services.yml
services:
    Tapir\FormBundle\Controller\AjaxEntityController:
        autowire: true

或者更多的控制器,PSR-4服务自动发现

代码语言:javascript
复制
# app/services/services.yml
services:
    _defaults:
        autowire: true

    Tapir\:
        resource: src/Tapir/{Controller}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32461740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档