フレームワークで大事なのは基本的な文法ではなく、構造の理解だと思います。
PHPですとCake,Laravel,Synfonyなどありますが、1つのものでしっかりと理解できていれば他のものもそれほど問題ありません。
直近ではLaravelを使っておりましたが、大事なのはLaravelの文法ではなく、Laravelが持っているフレームワークの構造への理解だと思います。
Laravelを触った当初、それぞれの基本的な使い方は理解できていましたが、正しく理解して使うといったレベルには落とし込めていませんでした。
直近の現場ではそこそこ触らせていただいたこともあり、復習してみようと思います。
- エントリーポイント
- ルータ
- 様々なミドルウェア
- コントローラ
Laravelだけではありませんが、フレームワークの大まかな構造を記述すると上記のようになるかと思います。
エントリーポイント
httpリクエストがあって、フレームワークが一番最初に読む場所です。
ほとんどのケースで public/index.php になっているのではないでしょうか。
大体のフレームワークでここをドキュメントルートにしており、htaccessで下記のように記述しております。
1 2 3 |
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] |
ファイルがなかったらindex.phpに飛んでねってことですが、そもそもpublic直下にURLとドンピシャのファイルが置いていあることはリソース系のファイル(css,js,画像系など)でもないことからほぼindex.phpにきます。
ちなみに、Laravelがpublic/index.phpでやっていることは
- 各libraryの読み込み
- Kernel::class の読み込み
になります。
ちなみにKernel:classでやっていることはざっくり言うと、下記のような流れになります。
全ての処理の規定になる部分ですね。
1 2 3 4 5 6 7 |
try { ルータの実行 } catch (Exception $e) { 例外処理 } イベント発火 |
ルータ
リクエストとコントローラーを結びつける処理です。
一般的にはroutes直下に書かれています。
様々なミドルウェア
リクエストの前の共通処理です。
一般的なものとしては
認証系です。
これ1個1個Controllerにかくの大変ですね・・・
単純なものとしては
ログインしているかしていないかのものもありますが、
- 特定のIP
- 特定のURL
- 特定のフラグ
なんかも多かったりします。
それ以外にもディフォルトで入っていますが、暗号化、セッション処理、共通処理(空文字をnullにするなど)などあったりします。
Laravelではこれらの処理がapp/Http/Middleware直下に有り、さらに複数のミドルウェアがapp/Http/Kernelにまとめられています。
どのルーティングにどのミドルウェアを対応させるかもルーターで対応します。
コントローラー
リクエストの処理を実際に受け付けるところです。
多くの方がここに処理を書いていくと思います。
参考文献
PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 (日本語)
Laravelアーキテクチャ 2-1 ライフサイクル