正在修改 Pimple/Slim 个容器
Modifying Pimple/Slim container
我希望能够修改 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
数组!
提前致谢
抱歉,原来我可以将 $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
您可以先取消设置容器值来完成此操作。
Pimple 会冻结值,但允许您删除它们。
$container = new Slim\Container();
$container['config'] = ['foo'=>'bar'];
unset($container['config']);
$container->extend('config',function($config,$container){
$config['baz'] = 'Harry';
return $config;
});
我希望能够修改 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
数组!
提前致谢
抱歉,原来我可以将 $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
您可以先取消设置容器值来完成此操作。
Pimple 会冻结值,但允许您删除它们。
$container = new Slim\Container();
$container['config'] = ['foo'=>'bar'];
unset($container['config']);
$container->extend('config',function($config,$container){
$config['baz'] = 'Harry';
return $config;
});