【问题标题】:Pimple - extend object definition疙瘩 - 扩展对象定义
【发布时间】:2014-06-20 12:05:53
【问题描述】:

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

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;
} );

但它给了我这个错误:

带有消息“标识符”的未捕获异常“InvalidArgumentException” “扩展”不包含对象定义。

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

class ExtendClass
{
    private $extend = 'false';

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

但之后我收到此错误:

RuntimeException: 无法覆盖冻结的服务“扩展”。

谁能解释我做错了什么?谢谢。

【问题讨论】:

  • 你是在 PHPUnit 的 setUp 方法中运行 $DI->extend( 'extend', function( $extend, $c ) 吗?

标签: php dependency-injection pimple


【解决方案1】:

您需要像这样扩展服务:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多