logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

1.3. PHP フレームワークを組み立てる

08/12/2019, by Ivan

フレームワークを構築する方法はさまざまあります。とても複雑なフレームワークを好む人もいれば、とてもシンプルなものを好む人もいます。私たちの記事では、使いやすく理解しやすいフレームワークを手早く組み立てていきます。

私たちの記事は、オンラインストアの作成に必要なものとは異なる、あなた自身のフレームワークの開発を助けます。より大きなものを作るために、フレームワークに他の部分を簡単に追加できるようになります。この連載記事の主な目的は、あらゆる CMS 向けに自分自身のフレームワークを作れるようになることです。

パターン(Patterns)

 フレームワークの開発には、さまざまなアプリケーション設計のテンプレート、すなわちパターンが用いられます。パターンとは、プログラム開発に関わる共通の課題を解決する、最も優れた解決策と実践のことです。パターンのうち、私たちは次のものを使います:

  • モデル・ビュー・コントローラー(MVC, Model-View-Controller)
  • レジストリ(Registry)
  • シングルトン(Singleton)

モデル・ビュー・コントローラー(MVC)

MVC は私たちのフレームワークの基礎で、ユーザーインターフェースとアプリケーションのロジックを分離する解決策を提供します。ユーザーインターフェース(View)は、コントローラー(Controller)を使ってデータモデル(Model)とやり取りします。コントローラーは今度は、モデル内のデータを管理するのに必要なビジネスロジックを含みます。

例えば、ユーザーがビュー(view)で「カートに追加」をクリックすると、コントローラーがこのリクエストを処理し、カートのモデルとやり取りして商品をカートに追加します。通常、カートのモデルからのデータは、現在カートに何点の商品があるかをコントローラーに返し、新しい商品数の新しいカートを表示します。

MVC

私たちは自分のフレームワークを使い、MVC を基に機能を拡張できます。先に述べたように、データはモデルで表され、データ自体はデータベースに置かれます。ただし、モデルとデータベースのテーブルは同じ形式です(モデルのフィールドはテーブルのフィールドと一致します)。ですから、私たちの MVC の図を拡張できます。また、View で処理されてブラウザに表示される最終結果も見えるので、それも図に加えます。

MVC scheme

レジストリ(Registry)

レジストリは、私たちのフレームワークのオブジェクトのコレクションを保存する機能を提供します。レジストリの必要性は、MVC パターンに関わる抽象化から生じます。各コントローラーとモデル(例:商品、カート、ページ)は、次のような共通の課題を実行するために必要です:

  • DB へのクエリ
  • 必要な情報を得るためにユーザーが認証済みかの確認
  • View へのデータの送信(テンプレートの管理)
  • メールの送信、例えばサイトで商品を購入したとき
  • ファイルシステムとのやり取り、例えば商品の写真のアップロード。

ほとんどのシステムやフレームワークは、これらの機能をオブジェクトで実行します。私たちもそうしたオブジェクトを作ります。レジストリは、これらのオブジェクトをまとめて保存できるようにします。レジストリはフレームワーク内のどこからでも呼び出せ、そのために自身の機能へのアクセスを提供します。これが私たちのレジストリのおおよその図です。

MVC

フレームワークはレジストリと直接やり取りし、必要なときに他のオブジェクトへのアクセスを提供します。レジストリ内部では、オブジェクト同士もやり取りできます。例えば、テンプレートマネージャはファイルマネージャと連携でき、メール送信者はメールテンプレートと連携できます。

シングルトン(Singleton)

singleton は、日本語では「シングルトン」と呼ばれ、ドキュメントでもシングルトン、あるいは単に英語で singleton と書かれるのが一般的です。

シングルトンは、理解するのが最も簡単なパターンの 1 つです。主な目的は、クラスのインスタンスがただ 1 つだけ存在することを保証することです。その理由は通常、次のようなものです。元のクラスのオブジェクトが 1 つだけ必要で、そのオブジェクトがアプリケーションのどこからでも利用できる、すなわちグローバルアクセスが必要な場合です。

シングルトンは、クラスに目的が 1 つしかないときに使われます。例えば、他のオブジェクトが DB とやり取りできるよう、データベースとの接続を構成する場合です。

全体の構造

 私たちのフレームワークの開発に向けた次のステップは、構造の計画です。次のための構造を作る必要があります:

  • モデル
  • ビュー(私たちのフレームワークでサイトのスタイルを切り替える機能を統合できるよう、1 つのスタイルごとに別のフォルダを用意する)
  • コントローラー(コントローラーを別のフォルダに保存できるよう。機能を追加したい場合は、コントローラー入りの新しいフォルダを追加するだけでよい)
  • 管理者のコントローラー(私たちはフレームワークだけでなく CMS も作るので、モデレーターや管理者がサイトに情報を入力できるようにする必要がある)
  • レジストリ
  • レジストリのオブジェクト
  • アップロードされるファイル
  • サードパーティのライブラリ
  • その他のコード

フレームワークの構造を考慮すると、私たちのフレームワークのフォルダは次のようになるべきです(PHP ではそれが慣例なので、フォルダ名は英語を使います):

  • Models
  • Views
    • View A
    • Templates
    • Images
    • JavaScript
  • Controllers
    • Controller A
      • ControllerA
      • ControllerAAdmin
  • Registry
    • Objects
    • Database objects
  • Assets
  • Uploads
    • フレームワークに商品と画像を追加するときに拡張します!
  • Libraries
  • Miscellaneous