CodeIgniter MVC(モデルビューコントローラー)フレームワークの例

⚡ スマートサマリー

CodeIgniter MVCフレームワークは、アプリケーションをモデル、ビュー、コントローラーに分割します。モデルはデータとビジネスロジックを処理し、コントローラーはリクエストを調整し、ビューは結果を表示します。これにより、疎結合、柔軟性、そして開発者の生産性向上を実現します。

  • 🏗️ コアパターン: MVCは、アプリケーションをモデル、ビュー、コントローラーの3つのコンポーネントに分割します。
  • 💾 型: データソースとやり取りし、ビジネスロジックを保持する。多くの場合、Active Recordを介して行われる。
  • 🎛️ コントローラ: リクエストをリッスンし、入力を検証し、モデルとビューを調整します。
  • 飲料衣<XNUMXxXNUMX><XNUMXxBC><XNUMXxBC> 表示: データはHTML、CSS、および最小限のPHPで表示され、複雑なロジックは排除されています。
  • 🔗 疎結合: 各コンポーネントは独立して動作するため、フロントエンドとバックエンドの処理を並行して実行できます。
  • ショートタグ: CodeIgniterのビューでは、より簡潔なテンプレートを作成するために、一般的に短いPHPのechoタグが使用されます。
  • 🔁 リクエストフロー: コントローラーからモデル、ビューへ、そしてHTMLがブラウザへ返される。

CodeIgniter MVCフレームワーク

MVCとは何ですか?

MVCはModel-View-Controllerの略です。これは、アプリケーションを3つの主要なコンポーネントに分割するアーキテクチャパターンです。

  1. このモデルは、ビジネスロジックとデータベースとのやり取りを扱います。
  2. コントローラーは、モデルとビュー間のアクティビティを調整します。
  3. Viewはデータ表示を担当します。

MVCアーキテクチャパターンの利点は以下のとおりです。

  • 疎結合 – 各構成要素は互いに独立して存在し、機能する。
  • 柔軟性 – 個々のコンポーネントを簡単に変更できます。
  • 生産性の向上 – 複数の人が同時にプロジェクトに取り組むことができます。フロントエンド開発者はビューやプレゼンテーションの開発に集中でき、バックエンド開発者はモデルの開発に専念できます。また、システムが疎結合であるため、最終的にはすべてが連携して動作します。

モデル

モデルはデータソースとのやり取りを担当します。データソースは通常データベースですが、要求されたデータを提供するサービスである場合もあります。また、ビジネスロジックをコントローラーではなくモデルに記述するのが一般的です。この手法は一般的に「ファットモデル、スキニーコントローラー」と呼ばれます。

モデルは通常、データベースにデータを書き込み、データの編集、更​​新、削除のためのメカニズムを提供します。現代のWebアプリケーションでは、モデルはActive Recordなどのデータアクセス設計パターンを使用して、データベースとのやり取りを容易にします。

たとえば、 CodeIgniterはモデルを支援するために組み込みのActive Recordライブラリを使用する一方、Laravelなどの他のフレームワークはデータアクセスにEloquentオブジェクトリレーショナルマッパー(ORM)を使用する。

コントローラー

コントローラーは、ユーザーからのリソース要求をリッスンします。モデルとビューの間の仲介役として機能し、場合によってはビジネスルールも実装します。たとえば、コントローラーがデータベースへのユーザー登録要求を受け取ったとします。

コントローラーは、送信されたデータに対してデータ検証を実行し、必要なパラメータがすべて揃っていることを確認します。不足しているパラメータがある場合は、適切なエラーメッセージとともに登録ページにリダイレクトされます。コントローラーは、送信されたメールアドレスが既に存在するかどうかを確認するなど、モデルに対してさらに検証を実行するよう要求することもあります。すべての検証ルールに合格した場合、コントローラーはデータをモデルに送信して処理を依頼し、応答を待ちます。

モデルが情報を処理して肯定的な応答を返すと、コントローラーは適切なビューをロードし、モデルから返されたデータをパラメーターとして渡します。

表示

このビューは、エンド ユーザーに提示されるデータを処理します。 Web アプリケーションでは、ビューには HTML、CSS が含まれることが多く、オプションで Javaスクリプトビューには最小限のプログラミングコードが含まれており、通常はモデルから受け取ったデータのコレクションをループ処理するのに十分なコード、またはデータのクリーンアップや編集リンクの作成を行うヘルパー関数のみが含まれています。最新のWebアプリケーションのほとんどは、デザイナーが理解できる独自の擬似コードのような構文を持つテンプレートエンジンを使用しています。 CodeIgniterでは、短いPHPタグと制御構造を使用するのが一般的です。 CodeIgniterの場合、以下のコードを使用できます。

<?=$title?>

対照的に:

<?php
echo $title;
?>

制御構造は通常、次のように記述されます。

<?php foreach ($customers as $customer): ?>
<li>
<p><?=$customer->first_name?></p>
</li>
<?php endforeach; ?>

上記の例からわかるように、ビューでは以下の組み合わせを使用しています。 PHP すべてを純粋な PHP コードで囲むのではなく、HTML を使用します。

MVCフレームワークの仕組み

以下の図は、MVCフレームワークの仕組みを示しています。

MVCフレームワークの仕組み

コントローラはユーザーからのリクエストを受け取り、必要に応じてデータベースモデルとやり取りした後、結果をHTMLコードの形式でブラウザに返します。ブラウザはそのHTMLコードを人間が読みやすい形式に解釈し、ユーザーに表示します。

Codeイグナイターコントローラー

それでは、ロード時に何が起こったのかを詳しく見ていきましょう。 URL ウェブブラウザを開きます。application/controllersにあるWelcome.phpコントローラーファイルを開きます。以下のコードが表示されるはずです。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
$this->load->view('welcome_message');
}
}

ここに:

  • defined('BASEPATH') OR exit('No direct script access allowed'); は、リクエストが index.php を経由していない場合、コントローラーへの直接アクセスを防止します。これはセキュリティ上の理由からです。
  • class Welcome extends CI_Controller {…} は Welcome コントローラ クラスを定義し、親クラス CI_Controller を拡張します。
  • public function index(){…} は、 URL http://localhost:3000.
  • $this->load->view('welcome_message'); は、application/views ディレクトリにある welcome_message ビューを読み込みます。

それでは、インデックスメソッドを以下のように更新します。

public function index()
{
$this->load->model('customers_model');
$data['customer'] = $this->customers_model->get_customer(3);
$this->load->view('welcome_message',$data);
}

ここに:

  • $this->load->model('customers_model'); 顧客モデルをロードします。
  • $data['customer'] = $this->customers_model->get_customer(3); は customers_model の get_customer メソッドを呼び出し、パラメータ 3 を渡します。この例では値をハードコーディングしていますが、実際のアプリケーションではこれは URI からのパラメータになります。
  • $this->load->view('welcome_message',$data); は welcome_message ビューを読み込み、$data 変数を渡します。

Code点火装置モデル

それでは、上記のコードで参照されているモデルを作成しましょう。簡略化のため、このモデルは データベース ただし、静的な顧客レコードが返されます。次のチュートリアルではデータベースを扱います。application/models ディレクトリに Customers_model.php ファイルを作成し、次のコードを追加してください。

<?php
class Customers_model extends CI_Model {
public function get_customer($id) {
$data['id'] = 3;
$data['first_name'] = 'John';
$data['last_name'] = 'Doe';
$data['address'] = 'Kingstone';
return $data;
}
}

ここに:

  • class Customers_model extends CI_Model {…} CI_Model を拡張するモデル Customers_model を定義します。
  • public function get_customer($id) {…} は、顧客 ID に基づいて get_customer メソッドを定義します。
  • $data[…]は、架空の顧客の静的な値を定義します。これはデータベースから返される行である必要があります。
  • $data を返します。 顧客データを返します。

これでモデルの説明は終わりです。次に、welcome_message ビューを変更しましょう。以下の場所にある welcome_message.php を開いてください。

application/views/welcome_message.php

以下のコードに置き換えてください。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CodeIgniter MVC Basics</title>
</head>
<body>
<h1>Customer Details Card</h1>
<p>Customer ID : <strong><?=$customer['id']?></strong></p>
<p>First Name : <strong><?=$customer['first_name']?></strong></p>
<p>Last Name : <strong><?=$customer['last_name']?></strong></p>
<p>Address : <strong><?=$customer['address']?></strong></p>
</body>
</html>

変更を保存して、以下を読み込んでください。 URL ウェブブラウザで: http://localhost:3000/下記の画像のように、お客様カードが表示されます。

顧客詳細カードは以下によって作成されました Codeイグナイター

よくあるご質問

つまり、ビジネスロジックはモデルの中に存在し、ping コントローラーは軽量で、リクエストのルーティングに特化しています。これにより、ロジックの再利用性が向上し、コントローラーの可読性とテスト性が向上します。

ビューはデータのみを表示するべきです。ping そこからロジックを分離することで、関心事が明確になり、デザイナーはビジネスルールに手を加えることなくレイアウトを編集でき、同じデータを異なるビューで表示できるようになります。

Active Recordは、モデルが生のSQLではなくメソッド呼び出しを使用してデータベースを読み書きできるようにする組み込みのクエリビルダーです。また、SQLインジェクション攻撃の回避にも役立ちます。ping 値。

AIは、機能の説明から対応するコントローラー、モデル、ビューファイルを生成し、命名規則の一貫性を保つことができる。 Rev生成されたクエリと検証結果を実行してから、それらを確認してください。

短い echo タグは、ビュー内で値を簡潔に表示するための方法です。完全な PHP タグブロックは、ステートメントや制御構造に使用されます。どちらも出力結果は同じですが、短いタグを使用するとビューがすっきりします。