疙瘩 - 扩展对象定义

时间:2014-06-20 12:05:54

标签: php dependency-injection pimple

我正在重建我当前的代码,我正在尝试使用依赖注入。我已经下载了Pimple并在一个文件中,我试图为自己创建一些示例。在doc中,我来到方法扩展,但我无法使其工作。对于测试,我创建了简单的类:

class ExtendClass
{
  private $extend = 'false';

  public function extendIt()
  {
    $this->extend = 'true';
  }
}

我创建了简单的对象, $ DI 是Pimple \ Container的实例:

$DI['extend'] = function( $c )
{
    return new ExtendClass();
};

我试图用它扩展它:

$DI->extend( 'extend', function( $extend, $c )
{
    $extend->extendIt();
    return $extend;
} );

但它给了我这个错误:

  

带有消息'Identifier'的未捕获异常'InvalidArgumentException'   “extend”不包含对象定义。

所以我找到了nad发现的容器,我需要在我的类中添加方法__invoke,所以我添加了它并使这个方法返回实例:

class ExtendClass
{
    private $extend = 'false';

    public function __invoke()
    {
        return $this;
    }

    public function extendIt()
    {
        $this->extend = 'true';
    }
}

但之后我收到了这个错误:

  

RuntimeException:无法覆盖冻结服务“extend”。

有人可以解释一下我做错了什么吗?感谢。

1 个答案:

答案 0 :(得分:0)

你需要扩展这样的服务:

$DI->extend( 'extend', function($app)
{
    $app['extend']->extendIt();
    return $app['extend'];
} );