有没有办法在控制器构造函数中加载容器服务,例如
class PostController extends Controller
{
protected $breadcrumb;
public function __construct()
{
//initializing breadcrumb
$breadcrumbs = $this->get("white_october_breadcrumbs");
$breadcrumbs->addRouteItem("Dashboard", "adminPage");
$breadcrumbs->addRouteItem("Post", "postPage");
$this->breadcrumb = $breadcrumbs;
}
//..
}
Run Code Online (Sandbox Code Playgroud)
您正在扩展通过 setter 注入( method )而不是构造函数参数注入的Symfony\Bundle\FrameworkBundle\Controller\Controller
类。container
setContainer
当您处于您的状态时,__construct()
您还没有$container
可用的状态。因此,您的解决方案是重写setContainer
方法(在构造控制器后立即由服务容器调用)并将您的逻辑放在那里(而不是__construct()
)。
class PostController extends Controller
{
protected $breadcrumb;
public function setContainer(ContainerInterface $container = null)
{
parent::setContainer($container);
$breadcrumbs = $container->get("white_october_breadcrumbs");
$breadcrumbs->addRouteItem("Dashboard", "adminPage");
$breadcrumbs->addRouteItem("Post", "postPage");
$this->breadcrumb = $breadcrumbs;
}
}
Run Code Online (Sandbox Code Playgroud)
其他需要更多工作的解决方案是将控制器定义为服务并将其设置container
为构造函数参数