为带有Pimple的框架控制器定义依赖项

问题描述 投票:1回答:1

所以我有一个控制器,我已经像这样添加了它与Pimple的依赖关系:

$this->container['Account'] = $this->container->factory(function ($c) {
    return new Account(
        $c['Menu_builder']
    );
});

当我转到此控制器中任何动作的URL时,它只会说:

Message: Argument 1 passed to Account::__construct() must be an instance of Menu_builder, none given, called in website/system/core/CodeIgniter.php on line 482 and defined Filename: controllers/Account.php Line Number: 13

要加载具有依赖性的任何类,我通常会说:

$account = $this->container['Account'];

但是我不确定在框架控制器的情况下该调用放在哪里。

控制器看起来像这样:

class Account extends MY_Controller
{
    private $menu_builder;

    public function __construct(Menu_builder $menu_builder){
        $this->menu_builder = $menu_builder;
    }
    // ...
}

问题:我在这里做错了什么?上面的方法可以很好地返回除控制器以外的任何类。

php codeigniter dependency-injection frameworks pimple
1个回答
0
投票

在执行$c['Menu_builder']之前,您可能没有为$account = $this->container['Account']分配值。在实例化Account类之前,尝试将控制器分配给Menu_builder。

© www.soinside.com 2019 - 2024. All rights reserved.