ホームページ  >  記事  >  PHPフレームワーク  >  thinkphpのmvcは何を表していますか

thinkphpのmvcは何を表していますか

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-08-26 14:30:193264ブラウズ

thinkphpのmvcは何を表していますか

ThinkPHP は MVC (Model-View-Controller、Model-View-Controller) パターンに基づいており、マルチレイヤー (多層) 設計をサポートしています。

モデル層

デフォルトのモデル層は Model クラスで構成されますが、プロジェクトが成長し、ビジネス システムがより複雑になるにつれて、単一のモデル層は非常に複雑になります。要件を解決するのは困難です。ThinkPHP は多層モデルをサポートしています。設計思想は非常にシンプルです。さまざまなモデル層は引き続きシステムの Model クラスから継承されますが、ディレクトリ構造と命名規則で区別されます。

thinkphpのmvcは何を表していますか

関連する推奨事項: 「ThinkPHP チュートリアル

たとえば、特定のプロジェクト設計では、データを区別する必要があります。レイヤー、ロジック レイヤー、サービス レイヤーとその他のさまざまなモデル レイヤーを使用すると、モジュール ディレクトリの下にモデル、ロジック、サービス ディレクトリを作成し、ユーザー テーブル上のすべてのモデル操作を 3 つのレイヤーに分割できます:

1. データレイヤー: Model/UserModel はデータ関連の自動検証と自動完了、およびデータ アクセス インターフェイスを定義するために使用されます

2. ロジック レイヤー: Logic/UserLogic はユーザー関連のビジネス ロジックを定義するために使用されます

3. サービス層: Service/UserService によって使用されます。ユーザー関連のサービス インターフェイスなどを定義するために使用されます。

3 つのモデル操作クラスはすべて、Model クラスを継承できます。次に例を示します。

データ層:

Home/Model/UserModel.class.php
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
}

論理層:

Home/Logic/UserLogic.class.php
namespace Home\Logic;
use Think\Model;
class UserLogic extends Model{
}

サービス層: Home/Service/UserService.class.php

namespace Home\Service;
use Think\Model;
class UserService extends Model{
}

さまざまなモデル層を区別した後、ユーザー データの操作は非常に複雑になります。組み込みの D メソッドを使用して呼び出すと非常に便利です:

D(‘User‘) //实例化UserModel
D(‘User‘,‘Logic‘) //实例化UserLogic
D(‘User‘,‘Service‘) //实例化UserService

デフォルトのモデル層は Model ですが、設定を変更することもできます。たとえば:

‘DEFAULT_M_LAYER‘       =>  ‘Logic‘, // 更改默认的模型层名称为Logic

変更後、インスタンス化するときに、次のように変更する必要があります:

D(‘User‘) //实例化UserLogic
D(‘User‘,‘Model‘) //实例化UserModel
D(‘User‘,‘Service‘) //实例化UserService

モデル層の階層分割は非常に柔軟で、開発者はプロジェクトのニーズに応じてモデル階層を自由に定義および追加できます。モデルレイヤーのみを使用することもできます。

View (ビュー) レイヤー

ビュー レイヤーは、テンプレートとテンプレート エンジンで構成され、テンプレート内で PHP コードを直接使用できます。テンプレート エンジンは、後で説明するように、ドライバーを通じて他のサードパーティのテンプレート エンジンもサポートできます。マルチレイヤー ビューは、ディレクトリ (つまり、テンプレート テーマ) によって簡単に区別できます。例:

View/default/User/add.html
View/blue/User/add.html

より複雑なマルチレイヤー ビューは、別のビュー ディレクトリを使用することでさらに完成させることができます。たとえば、

view 普通视图层目录
mobile 手机端访问视图层目录

この利点は、異なるビュー レイヤーごとに異なるテンプレート テーマ機能をサポートできることです。

デフォルトのビュー レイヤーはビュー ディレクトリです。次のように設定を調整できます:

‘DEFAULT_V_LAYER‘       =>  ‘Mobile‘, // 默认的视图层名称更改为Mobile

デフォルト以外のビュー レイヤー ディレクトリのテンプレートを取得するには、T 関数を使用する必要があります。 、これについては後で説明します。

コントローラー層

ThinkPHP のコントローラー層は、コア コントローラーとビジネス コントローラーで構成され、コア コントローラーはシステム内の App クラスによって完成され、スケジューリングを担当します。 HTTP リクエストのインターセプトと転送、設定の読み込みなどを含む、アプリケーション (モジュール、コントローラー、操作を含む) の制御。ビジネス コントローラーは、ユーザー定義のコントローラー クラスによって完成します。マルチレイヤー ビジネス コントローラーの実装原理は、ビジネス コントローラーやイベント コントローラーなどのモデルの階層化と似ています。

Controller/UserController //用于用户的业务逻辑控制和调度
Event/UserEvent //用于用户的事件响应操作

アクセス コントローラー Home/Controller/UserController.class.php は次のように定義されます。

namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
}

イベント コントローラー Home/Event/UserEvent.class.php は次のように定義されます。

namespace Home\Event;
use Think\Controller;
class UserEvent extends Controller{
}

thinkphpのmvcは何を表していますかUserController は外部の対話型応答を担当し、http:// などの URL リクエストを通じて応答します。 serverName/User/index、UserEvent は内部イベント応答を担当し、内部でのみ呼び出すことができます:

A(‘User‘,‘Event‘);

デフォルトのアクセス コントローラー層はコントローラーです。設定は次のように調整できます:

‘DEFAULT_C_LAYER‘       =>  ‘Event‘, // 默认的控制器层名称改为Event

thinkphpのmvcは何を表していますか

つまり、外部から隔離されています。

マルチレイヤ コントローラの分割は必須ではなく、アプリケーションのニーズに応じて自由に階層化できます。コントローラー層では、必要に応じて階層化モデルを呼び出すことも、さまざまな階層化されたビュー (テーマ) を呼び出すこともできます。

MVC の 3 つの層では、ThinkPHP は M や V に依存しません。C のみまたは V のみを持つこともできます。これは、ThinkPHP 設計において非常に重要なユーザー エクスペリエンス設計です。ユーザーは定義するだけで済みます。 Cがなくても自動認識できます。

以上がthinkphpのmvcは何を表していますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。