Slim - 动态更改设置

Slim - Change settings dynamically

我想在确定路线后动态更新应用程序的设置值。例如,在大多数路由中,我将超时设置为 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 

那么动态更新设置的正确方法是什么?

虽然 $container['settings'] 看起来像一个数组访问,但它实际上是对一个闭包的调用,然后 returns 一个数组,这就是您收到该通知的原因。解决方案是检索数组,然后修改它:

$settings = $container['settings'];
$settings['timeout'] = $timeout;