Symfony Controller无法访问容器

时间:2017-06-08 22:52:26

标签: php symfony symfony-3.3

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

我的控制器扩展了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": [] }] 时,我收到了这个错误:

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):
    }
}

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

这是控制器的代码:

{{1}}

3 个答案:

答案 0 :(得分:2)

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

这些是有罪的:

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

答案 1 :(得分:1)

尝试在控制器上设置setContainer方法:

在service.yml

的控制器中添加呼叫

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

答案 2 :(得分:0)

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

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