我使用symfony2(2.6),并且我有要分支的类到全局变量。例如,类菜单:
namespace Cms'PageBundle'Twig;
use Doctrine'ORM'EntityManager;
class Menu {
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function show(){
/******/
}
}
和服务。yml
services:
class_menu:
class: Cms'PageBundle'Twig'Menu
arguments: ['@doctrine.orm.entity_manager']
twig_menu:
class: Cms'PageBundle'Twig'Menu
参见:
Menu.php第9行中的ContextErrorException:可捕获的致命错误:参数1传递给Cms''PageBundle''Twig''Menu::__construct()必须是的实例条令''ORM''EntityManager,未给定,调用/home/cms/public_html/app/cache/dev/appDevDebugProjectContainer.php3834行和定义的
一般来说,任何类(外部)都有构造函数和(论证)原则的问题。为什么?
Symfony2获取模型/控制器之外的条令
这个错误完全是意料之中的。Symfony2
希望通过调用__construct
构造函数来创建服务实例。如果您想保留单个类,则需要删除该__construct
并使用setter
依赖注入。
有一个关于这方面的官方文档:可选依赖项:Setter Injection
基本上,在创建服务实例的过程中不会传递EntityManager
实例,而是"稍后设置"。
希望这能有所帮助。
更新:
如果您回退到原始解决方案,请确保在以下两种情况下都通过EntityManager
:
services:
class_menu:
class: Cms'PageBundle'Twig'Menu
arguments: ['@doctrine.orm.entity_manager']
twig_menu:
class: Cms'PageBundle'Twig'Menu
arguments: ['@doctrine.orm.entity_manager']