首頁 > 後端開發 > php教程 > 请问在 构造函数里面,我怎么才能使用 $this->doctrine()->getManager() 这个方法

请问在 构造函数里面,我怎么才能使用 $this->doctrine()->getManager() 这个方法

WBOY
發布: 2016-06-06 20:43:29
原創
1118 人瀏覽過

我现在的结构是有一个CommonController 然后在里面写了查询菜单的方法,子类继承的时候,还必须得去调用这个方法才行。
能不能在构造函数里面使用 $this->doctrine()->getManager() 这个函数。 我在构造函数里写就报错,找不到has()。
请问该如何做才可以,谢谢~

Parent.php

<code>class AParent{
    private $menu;
    public function __construct(){
            $this->menu = $this->doctrine()->getManager()
                        ->getRepository(Menu')->findAll();
    }
}
</code>
登入後複製
登入後複製

Child.php

<code>class Child extends AParent{
    public function __construct(){
        parent::__construct();
        var_dump(parent::$menu);
    }
}
</code>
登入後複製
登入後複製

回复内容:

我现在的结构是有一个CommonController 然后在里面写了查询菜单的方法,子类继承的时候,还必须得去调用这个方法才行。
能不能在构造函数里面使用 $this->doctrine()->getManager() 这个函数。 我在构造函数里写就报错,找不到has()。
请问该如何做才可以,谢谢~

Parent.php

<code>class AParent{
    private $menu;
    public function __construct(){
            $this->menu = $this->doctrine()->getManager()
                        ->getRepository(Menu')->findAll();
    }
}
</code>
登入後複製
登入後複製

Child.php

<code>class Child extends AParent{
    public function __construct(){
        parent::__construct();
        var_dump(parent::$menu);
    }
}
</code>
登入後複製
登入後複製

这样是不行的 你要使用 Dependency Injection:

你的

<code>class AParent{
    private $menu;
    public function __construct(){
            $this->menu = $this->doctrine()->getManager()
                        ->getRepository('Menu')->findAll();
    }
}
</code>
登入後複製

可以改为:

<code>class AParent{
    private $menu;
    private $container;
    public function __construct( $container){
        $this->container = $container
    }
    public function makeMenu()
    {
        $this->menu = $this->container->get('doctrine')->getManager()
                        ->getRepository('Menu')->findAll();
    }
    public function getMenu()
    {
        return $this->menu;
    }
    public function setMenu( $menu)
    {
        $this->menu = $menu;
        return $this;
    }
}
</code>
登入後複製

在 controller中使用 :

<code>public function indexAction(){
    $menuBuilder = new \XXX\XXX\AParent( $this->container );
    $menuBuilder->makeMenu();
    $menu = $menuBuilder->getMenu();
}
</code>
登入後複製

你还可以设置成servive:

services.yml:

<code>services:
    menu.builder:
        class: XXX\XXX\AParent
        arguments: [@service_container]
</code>
登入後複製

然后在controller中使用 :

<code>public function indexAction()
{
    $menuBuilder = $this->get('menu.builder');
    $menuBuilder->makeMenu();
    $menu = $menuBuilder->getMenu();
}
</code>
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板