まずはThinkPHP関数の詳細説明:M法をご紹介します
M メソッドは、基本的なモデル クラスをインスタンス化するために使用されます。D メソッドとの違いは次のとおりです。
1. モデルクラスをカスタマイズする必要がなく、IO 負荷が軽減され、パフォーマンスが向上します。
2. インスタンス化後に呼び出せるのは、基本モデル クラス (デフォルトは Model クラス) のみです。
3. インスタンス化中にテーブルの接頭辞、データベース、およびデータベース接続情報を指定できます。
D メソッドの威力は、カプセル化するカスタム モデル クラスの強力さに反映されますが、ThinkPHP フレームワークの新しいバージョンの基本モデル クラスがますます強力になるにつれて、M メソッドもますます実用的になってきています。 Dメソッドよりも。
Mメソッド呼び出し形式:
M('[基本モデル名:]モデル名','データテーブルプレフィックス','データベース接続情報')
M メソッドの具体的な用途を見てみましょう:
1. 基本モデル(Model)クラスをインスタンス化しますモデルが定義されていない場合、次のメソッドを使用して、操作用のモデル クラスをインスタンス化できます。 リーリー このメソッドは、モデルクラスを定義する必要がなく、プロジェクト間の呼び出しをサポートしているため、最も単純かつ効率的です。また、カスタム モデル クラスがないため、関連するビジネス ロジックを作成できず、基本的な CURD 操作のみを完了できるという欠点もあります。 リーリー
は実際には次と同等です:
リーリーは think_user テーブルを操作することを意味します。 M メソッドも D メソッドと同様にシングルトン関数を持ち、複数回呼び出されても繰り返しインスタンス化されません。 M メソッドのモデル名パラメーターは、データ テーブルに変換されるときに自動的に小文字に変換されます。これは、ThinkPHP のデータ テーブルの命名仕様がすべて小文字形式であることを意味します。
2. 他のパブリックモデルクラスをインスタンス化する
最初のインスタンス化方法にはモデル クラス定義がないため、いくつかの追加のロジック メソッドをカプセル化するのは困難ですが、ほとんどの場合、いくつかの共通ロジックを拡張するだけで済みます。その場合は、次の方法を試すことができます。
リーリー 変更された使用法は実際には次と同等です: リーリー
システムのモデルクラスは自動的にロードできるため、インスタンス化前にクラスライブラリを手動でインポートする必要はありません。モデル クラス CommonModel は Model を継承する必要があります。 CommonModel クラスでいくつかの共通の論理メソッドを定義できるため、プロジェクトに既に 100 を超えるデータ テーブルがある場合、そのほとんどは基本的なメソッドです。CURD 操作では、一部のモデルのみがこのメソッドを備えています。カプセル化する必要がある複雑なビジネス ロジックがあるため、最初の方法と 2 番目の方法を組み合わせるのが良い選択です。
3. 受信テーブルのプレフィックス、データベース、その他の情報
M メソッドには 3 つのパラメーターがあります。最初のパラメーターはモデル名 (基本的なモデル クラスとデータベースを含めることができます)、2 番目のパラメーターはデータ テーブルのプレフィックスを設定するために使用されます (現在のプロジェクトのテーブル プレフィックスを取得する場合は空白のままにします)。構成)、3 番目のパラメーターは、データ テーブルのプレフィックスを設定するために使用されます。パラメーターは、現在使用されているデータベース接続情報を設定するために使用されます (現在のプロジェクト構成のデータベース接続情報を取得する場合は空白のままにします)。例:
リーリー は、Model モデル クラスをインスタンス化し、db2 データベース内の think_user テーブルを操作することを意味します。
2 番目のパラメータが空白のままであるか渡されない場合は、現在のプロジェクト設定でデータ テーブル プレフィックスを使用することを意味します。操作されているデータ テーブルにテーブル プレフィックスがない場合は、次を使用できます。 リーリーは、Model モデル クラスをインスタンス化し、db1 データベース内のユーザー テーブルを操作することを意味します。
操作するデータベースに別のユーザー アカウントが必要な場合は、次のようにデータベース接続情報を渡すことができます:
リーリー基本モデル クラスが Model を使用し、think_user テーブルを操作し、user_a アカウントを使用してデータベースに接続し、操作データベースが thinkphp であることを示します。
3 番目の接続情報パラメーターは、DSN 構成またはアレイ構成を使用でき、構成パラメーターもサポートできます。
たとえば、プロジェクト構成ファイルで構成されます:
リーリーその後、以下を使用できます:
リーリー基本的なモデルクラスとデータベースは一緒に使用できます。例:
リーリーパブリックモデルクラスを使用して階層モデルをインスタンス化したい場合は、以下を使用できます:
リーリーを使用して UserLogic をインスタンス化します。ただし、
を使用できるため、あまり意味はありません リーリー同じ機能を実現します。
ThinkPHPの機能詳細説明:RメソッドR メソッドは、A メソッドをさらに拡張および補足するもので、特定のコントローラーの操作メソッドを呼び出すために使用されます。方法Aの使用方法はこちらをご覧ください。
Rメソッド呼び出し形式: R('[プロジェクト://][グループ/]モジュール/オペレーション','パラメーター','コントローラー層名')
たとえば、操作メソッドを次のように定義します:
リーリーその後、R メソッドを介して他のコントローラーでこの操作メソッドを呼び出すことができます (通常、R メソッドはモジュール間の呼び出しに使用されます)
リーリーは、ユーザー コントローラーの詳細メソッドを呼び出すことを意味し (詳細メソッドはパブリック型である必要があります)、戻り値は ID 5 のユーザー データをクエリすることです。呼び出したい操作メソッドにパラメータがない場合は、2 番目のパラメータを空白のままにして直接使用できます。
リーリーグループ間およびプロジェクト間の通話もサポートできます。例:
リーリーは、Admin グループの下の User コントローラーの詳細メソッドを呼び出すことを意味します。
R('Admin://User/detail',array('5'));
表示调用Admin项目下面的User控制器的detail方法。
官方的建议是不要在同一层多太多调用,会引起逻辑的混乱,被公共调用的部分应该封装成单独的接口,可以借助3.1的新特性多层控制器,单独添加一个控制器层用于接口调用,例如,我们增加一个Api控制器层,
class UserApi extends Action { public function detail($id){ return M('User')->find($id); } }
然后,使用R方法调用
$data = R('User/detail',array('5'),'Api');
也就是说,R方法的第三个参数支持指定调用的控制器层。
同时,R方法调用操作方法的时候可以支持操作后缀设置C('ACTION_SUFFIX'),如果你设置了操作方法后缀,仍然不需要更改R方法的调用方式。
以上内容给大家分享了ThinkPHP函数详解之M方法和R方法,希望对大家有所帮助。