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

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

WBOY
WBOYOriginal
2016-06-06 20:43:291121browse

我现在的结构是有一个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>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn