ThinkphpのMVC階層化アーキテクチャ

Thinkphp5のディレクトリ構造:

1つは、モデルモデルレイヤーです。

1、より複雑なデータは、以下のモジュールは、ディレクトリ内に作成することができ、プロジェクトの設計層との間にそのようなモデルの異なる層として論理層、サービス層を、区別する必要があるModelLogicServiceディレクトリ、すべてのユーザーの操作のためのモデルテーブルは3つのレイヤーに分かれています。

  • データレイヤー:Model / UserModelは、データ関連の自動検証、自動完了、およびデータアクセスを定義するために使用されます
  • ロジックレイヤー:Logic / UserLogicは、ユーザー関連のビジネスロジックを定義するために使用されます
  • サービス層:Service / UserServiceは、ユーザー関連のサービスインターフェイスなどを定義するために使用されます。

2.これらの3つのモデル操作クラスは、モデルクラスを均一に継承する必要があります。次に例を示します。 

データレイヤー:ホーム/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{
}

3. Thinkphpの組み込みDメソッドを使用して、次の3つのモデルクラスを呼び出すことができます。

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

2、ビュービューレイヤー

1.fetch() 渡されたパラメータはテンプレート名であり、テンプレートファイルを使用して出力します。

class Index extends Controller{
    /**
     * 首页
     */
    public function index()
    {
        return $this->fetch();
    }
}

fetch() パラメータが渡されない場合 、プログラムは自動的にビュー/index/index.htmlレンダリング出力を見つけます。

helloなどのパラメータを渡すと 、プログラムはview /index/hello.html探して出力をレンダリングします。

     /**
     * 首页
     */
    public function index()
    {
        return $this->fetch('hello');
    }

2.display() 渡されたコンテンツを直接出力します。パラメータが渡されない場合、レイアウトはレンダリングされますが、コンテンツはありません。

class Index extends Controller{
    /**
     * 首页
     */
    public function index()
    {
        return $this->display();
    }
}

たとえば"hello"パラメータを渡す と、ページは文字列を直接出力します "hello"。

     /**
     * 首页
     */
    public function index()
    {
        return $this->display('hello');
    }

3. view()の使用法は、次のようにfetch(0)と同じです。

class Index extends Controller{
    /**
     * 首页
     */
    public function index()
    {
        return view();
    }
}

3、コントローラーコントローラーレイヤー

ThinkPHPのコントローラー層は、コアコントローラービジネスコントローラーで構成されています

  • コアコントローラーは、システム内のAppクラスによって完成され、HTTP要求のインターセプト、転送、構成の読み込みなど、アプリケーション(モジュール、コントローラー、操作を含む)のスケジューリング制御を担当します。
  • ビジネスコントローラーは、ユーザー定義のコントローラークラスによって完成されます。

マルチレイヤービジネスコントローラーの実現原理は、次のようにモデルのレイヤー化に似ています。

Controller/UserController //用于用户的业务逻辑控制和调度
Event/UserEvent //用于用户的事件响应操作
  • アクセスコントローラー は、外部の対話応答を担当します。たとえば、URLを介して応答を要求します。 http://域名/Home/User/login.html
  • イベントコントローラー は内部イベント応答を担当し、内部でのみ呼び出すことができるため、外部から分離されています。正確には、アクセスコントローラー以外の階層コントローラーは内部でのみインスタンス化できます。

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

namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
        // 用户登录
        public function login(){
            // 触发用户登录事件
            $event = new \Home\Event\UserEvent();
            $event->login();
        }
         // 用户注册
        public function register(){
            // 触发用户注册事件
            $event = new \Home\Event\UserEvent();
            $event->register();
        }
}

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

namespace Home\Event;
use Think\Controller;
class UserEvent extends Controller{
        // 用户登录事件
        public function login(){
           //这里写业务逻辑
        }
        // 用户注册事件
        public function register(){
           //这里写业务逻辑
        }
}

3.マルチレイヤーコントローラーを呼び出す3つの方法:

直接インスタンス化:

namespace Home\Controller;
use Think\Controller;
class UserController extend Controller {
        // 用户登录
        public function login(){
            // 触发事件
            $event = new \Home\Event\UserEvent();
            $event->login();
        }
}

関数のインスタンス化:

namespace Home\Controller;
use Think\Controller;
class UserController extend Controller {
        // 用户登录
        public function login(){
            // 触发事件
            $event = A('User','Event');
            $event->login();
            // 或者直接使用
            // R('User/login','','Event');         
        }
}

R関数呼び出し:

namespace Home\Controller;
use Think\Controller;
class UserController extend Controller {
        // 用户登录
        public function login(){
            // 触发事件
            R('User/login','','Event');         
        }
}

 

おすすめ

転載: blog.csdn.net/qq15577969/article/details/113725086