繁体   English   中英

Symfony Controller无法访问容器

[英]Symfony Controller unable to access container

所以我已经完成了Symfony 3的新安装,尝试设置一些API路由,但是我无法访问控制器内的容器。

我的控制器从具有ContainerAwareTrait的基本Symfony控制器扩展,但是当我尝试使用$this->container->get('service')我收到此错误:

"message": "Call to a member function get() on null",
"class": "Component\\Debug\\Exception\\FatalThrowableError",
"trace": [{
    "namespace": "",
    "short_class": "",
    "class": "",
    "type": "",
    "function": "",
    "file": "src\\Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller.php",
    "line": 50,
    "args": []
}]

看起来symfony自己的控制器无法找到容器,有什么我想念的吗?

这是控制器的代码:

use FOS\RestBundle\Controller\Annotations\Get;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;

class UsersController extends Controller
{
    /**
     * @Get()
     *
     * @return JsonResponse
     */
    public function getUsersAction()
    {
        $users= $this->get('doctrine.orm.entity_manager')->getRepository('AppBundle:User')->findAll();

        return new JsonResponse($users, 200):
    }
}

终于找到了答案谢谢@ Cerad的评论:Symfony 3的默认安装创建了services.yml文件,并将每个Controllers注册为服务。 禁用此功能允许我的控制器访问容器。

这些都是有罪的:

   AppBundle\Controller\:       
        resource: '../../src/AppBundle/Controller'      
        public: true        
        tags: ['controller.service_arguments']

尝试在控制器上设置setContainer:

在service.yml的控制器中添加调用

  AppBundle\\Controller\\: resource: '../../src/YourBundle/YourController' public: true tags: ['controller.service_arguments'] calls: - [setContainer, ["@service_container"]] 

在控制器中,只需在$this上使用方法get()即可访问容器,例如:

$this->get('security.token_storage')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM