时间:2021-07-01 10:21:17 帮助过:4人阅读
Parent.php
class AParent{
private $menu;
public function __construct(){
$this->menu = $this->doctrine()->getManager()
->getRepository(Menu')->findAll();
}
}
Child.php
class Child extends AParent{
public function __construct(){
parent::__construct();
var_dump(parent::$menu);
}
}
我现在的结构是有一个CommonController 然后在里面写了查询菜单的方法,子类继承的时候,还必须得去调用这个方法才行。
能不能在构造函数里面使用 $this->doctrine()->getManager() 这个函数。 我在构造函数里写就报错,找不到has()。
请问该如何做才可以,谢谢~
Parent.php
class AParent{
private $menu;
public function __construct(){
$this->menu = $this->doctrine()->getManager()
->getRepository(Menu')->findAll();
}
}
Child.php
class Child extends AParent{
public function __construct(){
parent::__construct();
var_dump(parent::$menu);
}
}
这样是不行的 你要使用 Dependency Injection:
你的
class AParent{
private $menu;
public function __construct(){
$this->menu = $this->doctrine()->getManager()
->getRepository('Menu')->findAll();
}
}
可以改为:
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;
}
}
在 controller中使用 :
public function indexAction(){
$menuBuilder = new \XXX\XXX\AParent( $this->container );
$menuBuilder->makeMenu();
$menu = $menuBuilder->getMenu();
}
你还可以设置成servive:
services.yml:
services:
menu.builder:
class: XXX\XXX\AParent
arguments: [@service_container]
然后在controller中使用 :
public function indexAction()
{
$menuBuilder = $this->get('menu.builder');
$menuBuilder->makeMenu();
$menu = $menuBuilder->getMenu();
}