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

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

WBOY
WBOYOriginal
2016-06-06 20:43:291145Durchsuche

我现在的结构是有一个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>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn