2017-05-23 4 views
1

Ich möchte ein Array auf einem Pimple-Container ändern können, da die Dienste von Pimple eingefroren werden, scheint dies unmöglich zu sein.Pickel/Slim-Container modifizieren

Ich habe versucht, die extend() Methode auf dem Container, aber aufgrund meiner Array nicht ein Objekt kann ich nicht ändern.

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

Mit 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. 

Gibt es keine Möglichkeit, eine Definition innerhalb Pimple Container zu ändern? Momentan bin ich um ein $config Array durch Verweis vor dem Instanziieren des Behälters, die weniger als ideal ist!

Vielen Dank im Voraus

Antwort

0

Sorry, es stellt sich heraus, dass ich die $ config in einer Funktion nur wickeln die gewünschten Ergebnisse zu erzielen.

$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 
1

Sie können dies tun, indem Sie zuerst den Container-Wert deaktivieren.

Pickel friert Werte ein, aber Sie können sie entfernen.

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

Das würde den gesamten Wert löschen, nicht wahr? Wenn ja, dann versuche ich das nicht. –

+0

Sie müssen es zuerst löschen, um es zu lesen. – geggleto

+0

Wenn ich es lösche, wie kann ich es dann ändern? Kurz gesagt, ich habe versucht, neu mit alt zu verschmelzen. Egal, es ist jetzt erreicht worden. –

Verwandte Themen