我想在确定路由后动态更新应用程序的设置值。例如,在大多数路由中,我将超时设置为600秒。这已在设置文件中进行了硬编码。
return [
'settings' => [
'timeout' => 600,
....]
];
但是在某些特殊路由中,我需要根据输入将超时更改为其他值。例如
$app->get('/route1', function ($request, $response, $args) {
$timeout = (some calculations from $args)
$container['settings']['timeout'] = $timeout;
});
但是在将超时值设置为容器时出现此错误:
Notice: Indirect modification of overloaded element of Slim\Collection has no effect
那么动态更新设置的正确方法是什么?
答案 0 :(得分:2)
尽管$container['settings']
看起来像是一个数组访问,但它实际上是对一个闭包的调用,然后返回一个数组,这就是你得到那个通知的原因。解决方案是检索数组然后修改它:
$settings = $container['settings'];
$settings['timeout'] = $timeout;