修改Pimple / Slim容器

时间:2017-05-23 08:10:48

标签: php slim pimple

我希望能够在Pimple容器上修改数组,但是,因为服务被Pimple冻结,这似乎是不可能的。

我在容器上尝试了extend()方法,但由于我的数组不是对象,我无法修改它。

$container = new Slim\Container();
$container['config'] = ['foo'=>'bar'];
// .... do some other stuff.
$container['config']['baz'] = 'Harry'; // throws an error regarding indirect modification

使用extend

$container = new Slim\Container();
$container['config'] = ['foo'=>'bar'];
$container->extend('config',function($config,$container){
    $config['baz'] = 'Harry';
    return $config;
});
// throws an error PHP Fatal error:  Uncaught InvalidArgumentException: Identifier "config" does not contain an object definition.

是否无法修改Pimple容器内的定义?目前我在实例化容器之前通过引用传递$config数组,这不太理想!

提前致谢

2 个答案:

答案 0 :(得分:2)

您可以先取消设置容器值。

疙瘩会冻结值但会允许您删除它们。

$container = new Slim\Container();
$container['config'] = ['foo'=>'bar'];
unset($container['config']);
$container->extend('config',function($config,$container){
    $config['baz'] = 'Harry';
    return $config;
});

答案 1 :(得分:0)

很抱歉,事实证明我可以将$ config包装在一个函数中以实现所需的结果。

$container = new Slim\Container();
$config = ['foo'=>'bar'];
$container['config'] = function($container) use($config){
    return $config;
};
$container->extend('config',function($config,$container) {
    $config['baz']='Harry';
    return $config;
});
print_r($container['config']);
// foo=>bar, baz=>Harry