【发布时间】:2014-10-08 17:36:56
【问题描述】:
我有以下控制器:
namespace Acme\CompanyBundle\Controller;
use Symfony\Component\DependencyInjection\Container;
/**
* Company controller.
*
*/
class CompanyController extends Controller
{
protected $container;
public function __construct(Container $container)
{
$this->container = $container;
}
public function getData()
{
$userObj = $this->container->get('security.context')->getToken()->getUser();
}
}
在我的services.yml 文件中,我注入了Container 类:
parameters:
acme.controller.company.class: Acme\ContainerBundle\Controller\CompanyController
services:
acme.controller.company:
class: %acme.controller.company.class%
arguments: [@service_container]
加载此控制器时,出现以下错误:
可捕获的致命错误:参数 1 传递给 Acme\CompanyBundle\Controller\CompanyController::__construct() 必须是 Symfony\Component\DependencyInjection\Container 的一个实例,无 给定,在线调用 C:\wamp\www\symfony\app\cache\dev\classes.php 2785 并定义于 C:\wamp\www\symfony\src\Acme\CompanyBundle\Controller\CompanyController.php 线...
如您所见,这是将Container 对象简单地注入到控制器中,但会引发很好的错误。这里有什么问题?
类似问题发布在另一个SO thread here。
【问题讨论】:
-
原因是你的路由还在使用MyBundle:CompanyController:action。您需要将控制器作为服务调用_controller:acme.controller.company:action symfony.com/doc/current/cookbook/controller/service.html
-
是的,很棒。我能理解。但是,您能否根据我的配置重写该设置,以便我清楚地理解?