我现在的结构是有一个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>
%本文来源gaodai#ma#com搞*代#码9网#搞gaodaima代码
回复内容:
我现在的结构是有一个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>