SlimでTwitterAPIやSessionの設定をsettingsに追加しましたが
コンテナに追加する際に、設定値がNullになっていしまう。
$container['twitterOAuth'] = function ($c) {
$settings = $c->get('settings')['twitter'];
var_dump( $c->get('settings') );
exit;
Null
エラーも特に出てないので、Slimがどうやってsettingsを読んでいるか見てみた。
slim/slim/Slim/Collection.php
他はgetterなどなんで、フィルターはない。
public function __construct(array $items = [])
{
$this->replace($items);
}
slim/slim/Slim/Container.php
settingsが空ならEmptyでCollection作るけど
valuesにはあるけど、userSettingsにはない。
public function __construct(array $values = [])
{
parent::__construct($values);
var_dump( $values ); ある
$userSettings = isset($values['settings']) ? $values['settings'] : [];
var_dump( $userSettings ); ない
$this->registerDefaultServices($userSettings);
}
private function registerDefaultServices($userSettings)
{
$defaultSettings = $this->defaultSettings;
/**
* This service MUST return an array or an
* instance of \ArrayAccess.
*
* @return array|\ArrayAccess
*/
$this['settings'] = function () use ($userSettings, $defaultSettings) {
return new Collection(array_merge($defaultSettings, $userSettings));
};
$defaultProvider = new DefaultServicesProvider();
$defaultProvider->register($this);
}
なんてことはなく、settings.phpのsettingsの閉じが意図してなかっただけ。。
return ‘settings’ , ‘session’ , ‘twitter’;
になってただけだった。。
settings.php
// Monolog settings
'logger' => [
'name' => 'App',
'path' => __DIR__ . '/logs/app.log',
'level' => \Monolog\Logger::DEBUG,
],
], // 多いい。。。。