Read slimphp/Slim-Skelton
このリポジトリのソースコードを読んでみる。
https://github.com/slimphp/Slim-Skeleton/blob/master/public/index.php を眺めてみる。
autoload.php というのを読み込んでいるらしい。
また、PHP における __DIR__
というのは マジック定数 の一種で、そのファイルが存在するディレクトリをしめすようだ。
vendor ディレクトリは .gitignore に記載されていた。
再び https://github.com/slimphp/Slim-Skeleton/blob/master/public/index.php を眺める。
以下で ContainerBuilder
を生成している。
ContainerBuilder
は、settings
dependencies
repositories
に渡されているようだ。これらが関数なのかコンストラクタなのかわかっていない。
https://github.com/slimphp/Slim-Skeleton/blob/master/app/settings.php を読む。どうやら、これは ContainerBuilder
を受け取る関数を定義しており、アプリケーションの設定をする役割を持っているようだ。
アプリケーションにおけるエラー表示の有無、ログ出力の有無、ログ出力設定が記載されていた。
前述のコメントにおける、以下のコードが何をしているのか理解できていない。SettingsInterface というインタフェースの class に、無名関数を設定しているのか?
調査したところ、連想配列に値を設定しているようだった。SettingsInterface::class
がキーで、無名関数が値。
https://github.com/slimphp/Slim-Skeleton/blob/master/app/dependencies.php を読む。これは LoggerInterface::class
のふるまいを無名関数で定義しているようだ。
https://github.com/slimphp/Slim-Skeleton/blob/master/app/repositories.php を読む。これは、データの保存方法を指定している。このコードではメモリ上に保存するようにしている。
settings
, dependencies
, repositories
はコンテナに保存されており、アプリケーションから参照できるようになる。
ここまで読んだコードについて、気になる点を https://php-di.org/doc/ で調べてみる。
ContainerBuilder
のインスタンスメソッド addDefinitions
の利用例が Configuring the container に記載されていた。これを読む限り、DIコンテナに設定を追加する方法は2通りあって、一つは Container
のコンストラクタ引数に渡すという方法。もう一つは ContainerBuider
のインスタンスメソッド addDefinitions
を呼び出すという方法。後者の場合は設定の記述場所を分割することができ、柔軟性が高そうだ。
Middreware
と routing
のアプリケーションへの登録は以下で行われている。
app/middleware.php は以下。セッション管理用のミドルウェアを追加しているのだろうか。もし他に追加したい場合はこのファイルを編集すれば良さそう。
app/routes.php は以下。Rails でいう config.routes に相当する役割を持っていそう。