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

cakePHP Tips その2

またまたCakePHPのネタです。 タイトルから内容がわからなくてすいません。 五月雨式に行きます。 Contents1 コントローラーごとのベースになるテンプレートの変更2 linkタグでのHTML …

no image

拡張子の取得

PHPで配列を取得する場合、下記のメソッドで一気に取得できます。 pathinfo( ファイルパス,PATHINFO_EXTENSION ) いままで正規表現使ったり、explodeでやったりといろん …

no image

cakePHPのSSL設定+jQueryのError Loading Page

cakeで作ったアプリの認証画面でhttps環境だとError Loading Pageというエラーメッセージがでてしまい、ログインできないという事象が発生。 最初はSSLが原因かとおもっていたんです …

no image

ログライブラリについて

以前にも少し書いたログ設計に関する記事。 ログの設計指針について 上記でログの設計について書きましたが、今回はログのライブラリに関して欲しいと思う機能を。 Contents1 レベル分け2 チャネルわ …

no image

CakePHPでのプレフィックスルーティング

cakePHPではルーティングがデフォルトでは/コントローラ名/アクション名となります。 ところが管理画面などはadmin/コントローラー名/アクション名などと変則的なURLにしたいことも多いでしょう …