モデル、ビュー、コントローラー
MVC とは?
アプリケーションを作成するときはいつでも、適切なファイルを簡単に見つけ、保守を容易にするために、コードを整理する方法を見つける必要があります。ほとんどの Web フレームワークと同様に、CodeIgniter は、ファイルの整理にモデル、ビュー、コントローラー (MVC) パターンを使用します。これにより、データ、プレゼンテーション、アプリケーションのフローが別々の部分として維持されます。
各要素の正確な役割については多くの見解があることに注意してください。ただし、このドキュメントでは、私たちの解釈について説明しています。考え方によっては、必要に応じて各部分の使用方法を変更できます。
**モデル**はアプリケーションのデータを管理し、アプリケーションに必要な特別なビジネスルールを適用するのに役立ちます。
**ビュー**は、ロジックがほとんどない、またはまったくない単純なファイルであり、ユーザーに情報を表示します。
**コントローラー**は、ビュー (またはそれを見ているユーザー) とデータストレージの間でデータを前後にマーシャリングする、接着剤コードとして機能します。
最も基本的なレベルでは、コントローラーとモデルは、特定のジョブを持つ単なるクラスです。もちろん、使用できるクラスの種類はこれだけではありませんが、このフレームワークがどのように使用されるように設計されているかの中核を成しています。それらは**app**ディレクトリに専用のストレージディレクトリを持っていますが、適切に名前空間が定義されていれば、自由に好きな場所に保存できます。これについては、以下で詳しく説明します。
これらの 3 つの主要コンポーネントをそれぞれ詳しく見ていきましょう。
コンポーネント
ビュー
ビューは最も単純なファイルであり、通常はごく少量の PHP を含む HTML です。PHP は非常に単純で、通常は変数の内容を表示するか、いくつかの項目をループしてテーブルに情報を表示するだけです。
ビューは、コントローラーから表示するデータを取得します。コントローラーは、単純な echo
呼び出しで表示できる変数としてビューにデータを渡します。ビュー内に別のビューを表示することもできるため、すべてのページに共通のヘッダーまたはフッターを表示するのが非常に簡単になります。
ビューは一般的に **app/Views** に保存されますが、何らかの方法で整理されていないと、すぐに扱いにくくなる可能性があります。CodeIgniter はいかなる種類の編成も強制しませんが、経験則として、**Views** ディレクトリに各コントローラーの新しいディレクトリを作成することをお勧めします。次に、メソッド名でビューに名前を付けます。これにより、後で簡単に見つけることができます。たとえば、ユーザーのプロファイルは、User
という名前のコントローラーと、profile
という名前のメソッドに表示される場合があります。このメソッドのビューファイルは、**app/Views/user/profile.php** に保存できます。
このタイプの編成は、基本的な習慣として身につけるのに最適です。場合によっては、編成方法を変える必要があるかもしれません。それは問題ありません。CodeIgniter はファイルを見つけることができれば、それを表示できます。
モデル
モデルのジョブは、アプリケーションの単一タイプのデータを維持することです。これは、ユーザー、ブログ投稿、トランザクションなどです。この場合、モデルのジョブには 2 つの部分があります。データベースからプルされる、またはデータベースに配置されるデータにビジネスルールを適用すること。データベースからのデータの実際の保存と取得を処理することです。
多くの開発者にとって、混乱が生じるのは、どのビジネスルールが適用されるかを判断するときです。これは単に、データに対する制限または要件はモデルによって処理されることを意味します。これには、会社の標準を満たすために保存する前に生データを正規化すること、またはコントローラーに渡す前に列を特定の方法でフォーマットすることが含まれる場合があります。これらのビジネス要件をモデルに保持することで、複数のコントローラーでコードを繰り返したり、誤って領域を更新し忘れたりする必要がなくなります。
モデルは通常 **app/Models** に保存されますが、名前空間を使用して必要に応じてグループ化できます。
コントローラー
コントローラーには、いくつかの役割があります。最も明白な役割は、ユーザーから入力を受け取り、それを使って何をするかを決定することです。これには多くの場合、データをモデルに渡して保存すること、またはモデルからデータを要求してビューに渡して表示することが含まれます。これには、必要に応じて、モデルの範囲外である特殊なタスクを処理するための他のユーティリティクラスのロードも含まれます。
コントローラーのもう 1 つの役割は、HTTP リクエストに関連するすべてのこと (リダイレクト、認証、Web の安全性、エンコーディングなど) を処理することです。つまり、コントローラーは、人々がそこにいることを許可し、使用できる形式で必要なデータを取得する場所です。
コントローラーは通常 **app/Controllers** に保存されますが、名前空間を使用して必要に応じてグループ化できます。