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

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;
    }
//..
}

最佳答案

是的,这可以通过Controller as a Service进行。但是,注入容器被认为是一个不好的例子。如果要获取服务white_october_breadcrumbs,只需将其注入控制器服务定义中即可。如果您使用yaml:

service:
    class: app.controller.my_controller
    arguments:
        - "@white_october_breadcrumbs"




public function __construct(Breadcrumbs $breadcrumbs)
{
    $this->breadcrumbs = $breadcrumbs;
}




这是一个更好的解决方案,因为您不希望应用程序尽可能地依赖于容器。

考虑到您希望在多个页面上执行此操作,另一种解决方案是在事件上使用事件侦听器,甚至使用自定义注释来动态添加面包屑。但是不建议初学者使用。

10-07 21:07