skillup

技術ブログ

PHP

フレームワークの基本的なアーキテクチャについて

投稿日:2020年2月16日 更新日:

フレームワークで大事なのは基本的な文法ではなく、構造の理解だと思います。

PHPですとCake,Laravel,Synfonyなどありますが、1つのものでしっかりと理解できていれば他のものもそれほど問題ありません。

直近ではLaravelを使っておりましたが、大事なのはLaravelの文法ではなく、Laravelが持っているフレームワークの構造への理解だと思います。

Laravelを触った当初、それぞれの基本的な使い方は理解できていましたが、正しく理解して使うといったレベルには落とし込めていませんでした。

直近の現場ではそこそこ触らせていただいたこともあり、復習してみようと思います。

  1. エントリーポイント
  2. ルータ
  3. 様々なミドルウェア
  4. コントローラ

Laravelだけではありませんが、フレームワークの大まかな構造を記述すると上記のようになるかと思います。

エントリーポイント

httpリクエストがあって、フレームワークが一番最初に読む場所です。

ほとんどのケースで public/index.php になっているのではないでしょうか。

大体のフレームワークでここをドキュメントルートにしており、htaccessで下記のように記述しております。

ファイルがなかったらindex.phpに飛んでねってことですが、そもそもpublic直下にURLとドンピシャのファイルが置いていあることはリソース系のファイル(css,js,画像系など)でもないことからほぼindex.phpにきます。

ちなみに、Laravelがpublic/index.phpでやっていることは

  • 各libraryの読み込み
  • Kernel::class の読み込み

になります。

ちなみにKernel:classでやっていることはざっくり言うと、下記のような流れになります。

全ての処理の規定になる部分ですね。

ルータ

リクエストとコントローラーを結びつける処理です。

一般的にはroutes直下に書かれています。

様々なミドルウェア

リクエストの前の共通処理です。

一般的なものとしては

認証系です。

これ1個1個Controllerにかくの大変ですね・・・

単純なものとしては

ログインしているかしていないかのものもありますが、

  • 特定のIP
  • 特定のURL
  • 特定のフラグ

なんかも多かったりします。

それ以外にもディフォルトで入っていますが、暗号化、セッション処理、共通処理(空文字をnullにするなど)などあったりします。

Laravelではこれらの処理がapp/Http/Middleware直下に有り、さらに複数のミドルウェアがapp/Http/Kernelにまとめられています。

どのルーティングにどのミドルウェアを対応させるかもルーターで対応します。

コントローラー

リクエストの処理を実際に受け付けるところです。

多くの方がここに処理を書いていくと思います。

参考文献

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 (日本語)

Laravelアーキテクチャ 2-1 ライフサイクル

-PHP
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

リクエストとレスポンスについて

Laravelでリクエストとレスポンスにはそれぞれ元からクラスが当てあられております。

上記のようなメソッドでリクエストパラメータ自体 …

no image

PHP7に関して

先週きづいたのですが、PHPが5.6から7になりましたね。 まあ当分はまだPHP5で開発していきますが、herokuがいきなり7になり、アプリが動かないということが起こりました。 7対応させたかったん …

no image

composer.jsonのautoloadに関して

昔PHPでは他のファイルを読み込む時にはrequire_onceなどとすることが一般的でした。 で、クラスが増えてくるとこれがとんでもない量になってくるんですよね・・・ その時の代替案として_auto …

no image

LaravelでのAPI実装

Laravelで外部からAPI叩いてデータ入力みたいなことをしたかったのでこれを機に勉強。認証とかを通してないのでそのまま公開すると危険です・・(汗) 参考リンク [PHP] Laravel5.6で、 …

no image

PHPの名前空間

PHPでも5.3以降はJavaのパッケージのように名前空間を使うことができます。 いままではライブラリやアプリケーションの開発者は、PHPに組み込まれている関数やクラス名や他の人が作ったライブラリとの …

アーカイブ