Symfony2课外活动


Symfony2 Outside class

我使用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']