【解説】ZendFrameworkの基本構造

目次
- Zend FrameworkのMVCアーキテクチャが分からない…
- Zend Frameworkの複雑なディレクトリ構成がわからない…
- フロントコントローラーがどう機能するのかわからない…

プログラマー歴20年の管理人が、これらの悩みを解決できるようにZendFrameworkの基本構造を書きました!
Zend Frameworkの基本的なプロジェクト構造、そしてディレクトリ構成とその役割について理解することができます。
Zend Frameworkの基本的なディレクトリ構成の理解
- プロジェクトのディレクトリ構成と各フォルダの役割が明確になります。
MVCアーキテクチャの理解
- Model、View、Controllerのそれぞれの役割と、その連携方法がわかります。
フロントコントローラーの役割
- フロントコントローラーがリクエストをどのように処理し、ルーティングを行い、コントローラーとビューに渡すかを学びます。
MVCアーキテクチャを理解する
Zend Frameworkは、「MVCアーキテクチャ」という設計思想に基づいて構築されています。MVCとは、Model (モデル) – View (ビュー) – Controller (コントローラー) の略称で、アプリケーションの構成要素をそれぞれに役割分担することで、開発効率と保守性を高める効果があります。
- Model: データベースとのやり取りなど、アプリケーションの核となるロジックを担当します。
- View: ユーザーインターフェースを担当し、Modelから受け取ったデータを元にHTMLなどを生成します。
- Controller: ユーザーからのリクエストを受け取り、ModelとViewを連携させて処理を行います。
Zend Frameworkでは、このMVCアーキテクチャに沿って、プロジェクトのディレクトリ構成が決められています。
Zend Frameworkの基本的なディレクトリ構成
Zend Frameworkのプロジェクトを作成すると、以下のようなディレクトリが自動生成されます。
my-project/
│
├── config/
│ ├── autoload/
│ └── module.config.php
│
├── module/
│ └── Application/
│ ├── config/
│ ├── src/
│ │ ├── Controller/
│ │ └── Module.php
│ ├── view/
│ └── test/
│ └── Controller/
│
├── public/
│ ├── index.php
│
├── data/
│
└── vendor/
config/:
- autoload/: 自動読み込み設定ファイルを格納します。
- module.config.php: アプリケーション全体の設定ファイルを格納します。各モジュールの設定や全体の設定を管理します。
module/:
- Application/: デフォルトのアプリケーションモジュール。モジュールごとにコードと設定が格納されます。
- config/: モジュールの設定ファイルを格納します。
- src/: モジュールのソースコードを格納します。
- Controller/: コントローラークラスを格納します。ユーザーのリクエストを処理し、適切なレスポンスを生成します。
- Module.php: モジュールの初期化クラス。このクラスはモジュールの設定やサービスの初期化を行います。
- view/: モジュールのビュー(テンプレート)を格納します。ユーザーインターフェースのレンダリングに使用されます。
- test/: テストコードを格納します。
- Controller/: コントローラーのテストクラスを格納します。
public/:
- index.php: アプリケーションのエントリーポイント。すべてのリクエストを一元的に処理し、適切なコントローラーにルーティングします。
data/:
- アプリケーションのデータファイルを格納します。例として、データベースファイル、キャッシュファイル、ログファイルなどがあります。
vendor/:
-
Composerでインストールされた依存パッケージを格納します。外部ライブラリやフレームワークのコンポーネントが含まれます。
-
IndexController.php: アプリケーションのデフォルトコントローラーです。コントローラーはユーザーからのリクエストを処理し、適切なレスポンスを生成します。
IndexControllerは、一般的にアプリケーションのホームページや基本的なページのリクエストを処理します。
なぜ model フォルダがないのか?
Zend Framework の初期展開後、models フォルダは自動生成されません。これは、Zend Framework が薄いモデルの考え方を推奨しているためです。
「薄いモデル」とは、Model 層に複雑なロジックを持たせず、データベースとのやり取りなど最小限の機能のみに絞る設計思想です。
Zend Framework では、データベースとのやり取りは主に Table Data Gateway パターンを用いて行い、そのためのクラスは TableGateway や ResultSet といった Zend Framework が提供するコンポーネントを利用します。
そのため、初期状態では専用の models フォルダは用意されていません。
フロントコントローラーの役割
フロントコントローラーは、すべてのリクエストを一元的に処理するエントリーポイントです。public/index.phpに配置され、次の役割を果たします。
1. リクエストの受け取り
フロントコントローラーは、クライアント(ユーザーのブラウザなど)からのリクエストを受け取ります。このリクエストは、Webサーバーによってpublic/index.phpに渡されます。
2. ルーティング
リクエストを受け取ったフロントコントローラーは、次にリクエストのURLを解析し、どのコントローラーとアクションが対応するかを決定します。これをルーティングと呼びます。
ルーティング設定は通常、module.config.phpやroutes.config.phpに記述されます。
3. コントローラーとアクションの呼び出し
ルーティングによって決定されたコントローラーとアクションが呼び出されます。コントローラーは、リクエストを処理し、必要なデータをモデルから取得し、ビューに渡します。
4. レスポンスの返却
最終的に、コントローラーが生成したレスポンス(通常はHTML、JSONなど)がフロントコントローラーに戻され、クライアントに送信されます。
まとめ
MVCアーキテクチャ:
- Model: データベースとのやり取りやビジネスロジックを担当。
- View: ユーザーインターフェースを担当し、データをHTMLなどに変換。
- Controller: リクエストを受け取り、ModelとViewを連携。
Zend Frameworkのディレクトリ構成:
- 初期展開時にModel のフォルダは作成されないので、必要な場合は追加する。
フロントコントローラーの役割:
- リクエストの受け取り: クライアントからのリクエストを受け取る。
- ルーティング: リクエストのURLを解析し、対応するコントローラーとアクションを決定。
- コントローラーとアクションの呼び出し: 決定されたコントローラーとアクションを呼び出して処理。
- レスポンスの返却: コントローラーが生成したレスポンスをクライアントに送信。
-クラスとオブジェクトの基本.jpg)

-継承とポリモーフィズム.jpg)
-クラスとオブジェクトの基本.jpg)