我正在重新构建我的当前代码,并试图通过依赖注入来实现它。我已经下载了Pimple,在一个文件中,我试图为自己创建几个示例。在文档中,我谈到了方法扩展,但是我无法使它工作。为了进行测试,我创建了简单的类:
class ExtendClass
{
private $extend = 'false';
public function extendIt()
{
$this->extend = 'true';
}
}我已经创建了简单的对象,$DI是Pimple\的实例:
$DI['extend'] = function( $c )
{
return new ExtendClass();
};我试着用这个来扩展它:
$DI->extend( 'extend', function( $extend, $c )
{
$extend->extendIt();
return $extend;
} );但它给了我一个错误:
带有消息“标识符”“InvalidArgumentException”的未命名异常‘’不包含对象定义。
因此,我查看了容器nad发现,我需要将方法__invoke添加到我的类中,所以我添加了它并使这个方法返回实例:
class ExtendClass
{
private $extend = 'false';
public function __invoke()
{
return $this;
}
public function extendIt()
{
$this->extend = 'true';
}
}但在那之后,我得到了一个错误:
RuntimeException:无法覆盖冻结的服务“扩展”。
有人能解释我做错了什么吗?谢谢。
发布于 2015-06-22 10:46:36
您需要像这样扩展服务:
$DI->extend( 'extend', function($app)
{
$app['extend']->extendIt();
return $app['extend'];
} );https://stackoverflow.com/questions/24326867
复制相似问题