2

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

ContainerAwareTrait我的控制器从具有$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):
    }
}
4

3 回答 3

2

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

这些是有罪的行:

   AppBundle\Controller\:       
        resource: '../../src/AppBundle/Controller'      
        public: true        
        tags: ['controller.service_arguments']
于 2017-06-14T22:28:58.613 回答
1

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

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

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

于 2017-06-21T12:06:06.563 回答
0

在控制器中,您可以使用get()on方法访问容器$this,例如:

$this->get('security.token_storage')
于 2017-06-09T08:19:16.097 回答