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

PHPでのコンソール入力に関して

PHPはほとんどの場合、ブラウザでURLをたたいてWEBサーバーから呼び出されるパターンがほとんどです。 ところが、コンソールから使いたい場合などもあるでしょう。 コンソールから入力する場合、なんらか …

no image

cakePHP小ネタ集(Authの複数認証)

最近よく触っているcakePHPの小ネタなど。 Contents1 Authコンポーネント 複数の認証2 自動のdivタグを出力しない3 Cakeでのプルダウン作成 Authコンポーネント 複数の認証 …

no image

Laravelでのアプリ間のログイン連携

実務でLaravelで複数のアプリを作成し、アプリ同士でログイン連携をさせるという機能が実務であったため、メモします。 例えばhttp://example.comという売上管理のアプリでログイン認証を …

no image

PHPにおけるstaticキャッシュ

PHPにおけるstaticキャッシュに関して。 PHPのおけるキャッシュはいくつかありまして、一般的にはmemcachedなどのKVS方式のキャッシュサーバーなどを使う方法が一般的かと思います。 キャ …

no image

アプリケーションアーキテクチャについて 〜ドメインモデルに関して〜

前回のトランザクションスクリプトパターンの反省から 今回はいわゆるドメインモデルの具体例に関して。 ドメイン駆動型設計には以下のような特徴があります。 大きく、アプリケーションの構成を以下のように分け …

アーカイブ