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

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

WBOY
Release: 2016-06-06 20:43:29
Original
1119 people have browsed it

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

Parent.php

<code>class AParent{
    private $menu;
    public function __construct(){
            $this->menu = $this->doctrine()->getManager()
                        ->getRepository(Menu')->findAll();
    }
}
</code>
Copy after login
Copy after login

Child.php

<code>class Child extends AParent{
    public function __construct(){
        parent::__construct();
        var_dump(parent::$menu);
    }
}
</code>
Copy after login
Copy after login

回复内容:

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

Parent.php

<code>class AParent{
    private $menu;
    public function __construct(){
            $this->menu = $this->doctrine()->getManager()
                        ->getRepository(Menu')->findAll();
    }
}
</code>
Copy after login
Copy after login

Child.php

<code>class Child extends AParent{
    public function __construct(){
        parent::__construct();
        var_dump(parent::$menu);
    }
}
</code>
Copy after login
Copy after login

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

你的

<code>class AParent{
    private $menu;
    public function __construct(){
            $this->menu = $this->doctrine()->getManager()
                        ->getRepository('Menu')->findAll();
    }
}
</code>
Copy after login

可以改为:

<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>
Copy after login

在 controller中使用 :

<code>public function indexAction(){
    $menuBuilder = new \XXX\XXX\AParent( $this->container );
    $menuBuilder->makeMenu();
    $menu = $menuBuilder->getMenu();
}
</code>
Copy after login

你还可以设置成servive:

services.yml:

<code>services:
    menu.builder:
        class: XXX\XXX\AParent
        arguments: [@service_container]
</code>
Copy after login

然后在controller中使用 :

<code>public function indexAction()
{
    $menuBuilder = $this->get('menu.builder');
    $menuBuilder->makeMenu();
    $menu = $menuBuilder->getMenu();
}
</code>
Copy after login
Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template