gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

Slim docsの解析; The Application

https://www.slimframework.com/docs/
の中から「The Application」をざっくりと見て、興味深いところをメモ。


https://www.slimframework.com/docs/v3/objects/application.html

$config = [
    'settings' => [
        'displayErrorDetails' => true,

        'logger' => [
            'name' => 'slim-app',
            'level' => Monolog\Logger::DEBUG,
            'path' => __DIR__ . '/../logs/app.log',
        ],
    ],
];
$app = new \Slim\App($config);

settingはスケルトンで見たので知ってる〜。


ただ
Updating Settings

$settings = $container->get('settings');
$settings->replace([
        'displayErrorDetails' => true,
        'determineRouteBeforeAppMiddleware' => true,
        'debug' => true
    ]);
]);

は、なるほどふむり、興味深い。
……ただ、ってことは「Slimのデフォの値を把握してなきゃなんない」よねぇって思ったら Slim Default Settings がある、ので、ざっくりと備忘録的に。


httpVersion
まぁそのまんまだよねぇ。デフォ1.1。いつか2.0になるのかねぇ???


responseChunkSize
いわゆる「送りつける1塊のサイズ」。この辺、あんまりPHPだと意識していないような気がするんだけど、意識するとなにか変わるのかしらん?
デフォは4096バイト。


outputBuffering
出力バッファリングの有無。
fasleで「バッファリングしない」、appendで「後ろにつける」、prependで「前につける」、のいずれか。……それ以外の値の時ってどうなるんだろうねぇ?
デフォはappend。まぁデフォでいいと思うなぁ。
単純なtrue(出力バッファリングだけする)とか欲しいような気もしたけど、それ、appendになるわ。


determineRouteBeforeAppMiddleware
長いw
「trueの場合、ミドルウェアが実行される前にルートが計算されます。(機械翻訳)」………ふむ、なんかグっと来ない感じ。
デフォはfalseなので、あんまり使わないかしらん?


displayErrorDetails
「trueの場合、例外に関する追加情報がデフォルトのエラーハンドラによって表示されます。(機械翻訳)」で、デフォがfalse。
ふむ……開発環境でtrueにしておくと旨味があるのかしらん?


addContentLengthHeader
Content-Length付与の有無。デフォはtrueだし、まぁここはtrueのままでいいんじゃないかなぁ?


routerCacheFile
ルートファイルのキャッシュの有無で、デフォルトはfalse(キャッシュしない)。
……キャッシュの仕組みがよっぽどわかればともかく、それ以外だと、あんまりグっと来ないかなぁ。


設定したくなりそうなのはdisplayErrorDetailsくらいかしらん?
………あれ?
上にある「debug」ってなんじゃらほい?
grepしてみたけど、グっとくる情報がないなぁ。slim_test_plain(Slimしか入れてない環境)だと、引っかかってこないし。
とりあえず「一旦、デフォでは存在しない」って認識でOKかしらん。


あと。
$settings->replace()、スケルトンのほうだと使ってないのだよねぇ……軽く確認。

    public function __construct(array $values = [])
    {
        parent::__construct($values);

        $userSettings = isset($values['settings']) ? $values['settings'] : [];
        $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);
    }

ふむ、array_mergeがポイントか。
array_mergeは後だし有効だったはずだから………userSettingsが上書き。
なので「明示的にコンストラクタに渡して設定したらそっちが有効になる」なぁ。
ってことは、index.php付近での「初期設定」の時は「値を渡しておけば問答無用でそっち」になるぽ。
$settings->replace()は、とりあえず「使わない」かなぁ。この状態だと。


割とシンプルに調査終了。