MVC (Model-View-Controller) は、ソフトウェア開発で広く使用されているアーキテクチャ パターンであり、アプリケーションを 3 つの相互接続されたコンポーネントに分割します。
MVC パターンの主な目的は、関心事を分離して、アプリケーションの保守、拡張、テストを容易にすることです。これにより、開発者はアプリケーションのさまざまな部分に独立して作業できるようになり、生産性とコード構成が向上します。
PHP では、データ層、ロジック層、プレゼンテーション層を分離する方法でアプリケーションを構造化することで、MVC アーキテクチャを実装できます。 PHP アプリケーションに MVC を実装する方法を見てみましょう。
モデルは、ビジネス ロジックとデータ操作を担当します。データベースと対話し、アプリケーションが処理するデータを保持します。モデルには、そのデータを検証および管理するためのロジックも含まれています。
ビューは、ユーザーにデータを表示する役割を果たします。これはアプリケーションの UI を表し、多くの場合 HTML、CSS、JavaScript で構成されます。ビューはコントローラーからデータを受信し、それをユーザーにレンダリングします。
コントローラーは、モデルとビューの間の仲介者として機能します。ユーザー入力を受け取り、その入力に基づいてモデルを更新し、モデルが処理したデータでビューを更新します。
PHP で基本的な MVC アーキテクチャを実装してみましょう。アプリケーションを 3 つのフォルダーに分割します:
さらに、アプリケーションを初期化しリクエストをルーティングするエントリ ポイント (通常はindex.php) が必要です。
Model クラスは、データベースからのレコードのフェッチなどのデータ操作の処理を担当します。単純な「ユーザー」モデルがあると仮定しましょう。
app/Model/User.php:
<?php namespace App\Model; class User { private $db; public function __construct($db) { $this->db = $db; } // Fetch all users public function getAllUsers() { $query = "SELECT * FROM users"; $result = $this->db->query($query); return $result->fetchAll(PDO::FETCH_ASSOC); } // Add a new user public function addUser($name, $email) { $query = "INSERT INTO users (name, email) VALUES (:name, :email)"; $stmt = $this->db->prepare($query); $stmt->bindParam(':name', $name); $stmt->bindParam(':email', $email); return $stmt->execute(); } }
この例には、データベースからすべてのユーザーを取得し、新しいユーザーを追加する User モデルがあります。
ビューには、ユーザーにデータを表示する HTML が含まれています。すべてのユーザーをリストする単純なページがあると仮定しましょう。
app/View/UserListView.php:
<?php namespace App\View; class UserListView { public function render($users) { echo "<h1>User List</h1>"; echo "<ul>"; foreach ($users as $user) { echo "<li>{$user['name']} - {$user['email']}</li>"; } echo "</ul>"; } }
この例では、UserListView クラスがユーザーのリストを表示します。コントローラーからユーザーのデータを受信し、HTML リストに表示します。
コントローラーはユーザーから入力を受け取り、それを処理し (モデルからデータをフェッチするなど)、適切なビューをレンダリングします。
app/Controller/UserController.php:
<?php namespace App\Controller; use App\Model\User; use App\View\UserListView; class UserController { private $userModel; private $userView; public function __construct(User $userModel, UserListView $userView) { $this->userModel = $userModel; $this->userView = $userView; } // Fetch users and pass data to the view public function listUsers() { $users = $this->userModel->getAllUsers(); $this->userView->render($users); } }
UserController クラスは、User モデルからユーザーのリストを取得し、そのデータをレンダリングする UserListView に渡す役割を果たします。
ルーティング ロジックは、ユーザーのリクエストがどのように処理され、どのコントローラー メソッドが呼び出されるかを決定します。
public/index.php (エントリポイント):
<?php require_once '../vendor/autoload.php'; use App\Controller\UserController; use App\Model\User; use App\View\UserListView; // Database connection (assuming PDO) $db = new PDO('mysql:host=localhost;dbname=your_database', 'root', ''); // Create instances of the Model, View, and Controller $userModel = new User($db); $userView = new UserListView(); $userController = new UserController($userModel, $userView); // Simple Routing (for example purposes) if ($_SERVER['REQUEST_URI'] === '/users') { $userController->listUsers(); }
このindex.php ファイルでは、次のことを行います:
Composer を使用してクラスが自動ロードされていることを確認してください。次のように、composer.json ファイルで名前空間とフォルダー構造を定義できます。
{ "autoload": { "psr-4": { "App\": "app/" } } }
composer dump-autoload を実行してオートローダーを生成します。
PHP で MVC を実装すると、次のようないくつかの利点があります。
MVC は関心の分離を促進します。これは、データ (モデル)、UI (ビュー)、およびロジック (コントローラー) が異なるコンポーネントに分離されることを意味します。これにより、アプリケーションがよりモジュール化され、保守が容易になります。
ビジネス ロジックが UI から分離されているため、他の部分に影響を与えることなく、アプリケーションの一部を変更することが簡単になります。たとえば、ビジネス ロジック (モデル) を変更せずに UI (ビュー) を更新できます。
MVC を使用すると、単体テストを簡単に作成できます。ビューやコントローラーから独立してモデルをテストできるため、テストがより簡単になります。
MVC アプリケーションのコンポーネントは再利用可能です。たとえば、同じモデルを異なるビュー (表やグラフにユーザーをリストするなど) で使用できるため、コードがより再利用可能で柔軟になります。
MVC は、PHP アプリケーションを構築するための非常に効果的なアーキテクチャ パターンです。懸念事項を分離するのに役立ち、コードの保守とテストが容易になります。 PHP で MVC パターンを実装すると、すっきりと整理された構造を持つスケーラブルなモジュール型アプリケーションを構築できます。 Composer などのツールを使用して依存関係を自動ロードおよび管理すると、開発プロセスをさらに簡素化できます。
MVC パターンに従うことで、PHP アプリケーションが適切に構造化され、効率的で、保守が容易になります。
以上がMVC アーキテクチャの理解と PHP での実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。