首页 文章

Symfony2课外

提问于
浏览
0

我使用symfony2(2.6),我有全局变量类到twig . 例如,课程菜单:

namespace Cms\PageBundle\Twig;

use Doctrine\ORM\EntityManager;
class Menu {
    protected $em;

    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }
    public function show(){
       /******/
    }
}

和services.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:可捕获的致命错误:传递给Cms \ PageBundle \ Twig \的菜式参数1 :: Menu :: __ construct()必须是Doctrine \ ORM \ EntityManager的实例,没有给出,在/ home / cms /中调用第3834行的public_html / app / cache / dev / appDevDebugProjectContainer.php并定义

一般来说,任何类(外部)都有构造函数和(参数)学说的问题 . 为什么?

Symfony2 getdoctrine outside of Model/Controller

1 回答

  • 1

    完全可以预料到这个错误 . Symfony2 期望通过调用 __construct 构造函数来创建服务实例 . 如果要保持单个类的运行,则需要删除 __construct 并使用 setter 依赖注入 .

    有一个官方文件:Optional Dependencies: Setter Injection

    基本上,您不会在创建服务实例期间传递 EntityManager 实例,而是"set it later" .

    希望这可以帮助 .

    更新:

    如果您回退到原始解决方案,请确保在两个实例中都传递 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']
    

相关问题