在控制器构造函数上加载容器服务,Symfony

San*_*apa 3 php symfony

有没有办法在控制器构造函数中加载容器服务,例如

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)

Tom*_*ski 5

您正在扩展通过 setter 注入( method )而不是构造函数参数注入的Symfony\Bundle\FrameworkBundle\Controller\Controller类。containersetContainer

当您处于您的状态时,__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为构造函数参数