Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der M-Methode und der R-Methode der TP3-Funktion

Detaillierte Erläuterung der M-Methode und der R-Methode der TP3-Funktion

*文
*文Original
2018-01-05 10:02:204983Durchsuche

In diesem Artikel werden die M-Methode und die R-Methode der ThinkPHP3-Funktionen ausführlich vorgestellt. Die M-Methode wird zum Instanziieren einer grundlegenden Modellklasse verwendet, während die R-Methode zum Aufrufen der Operationsmethode eines bestimmten Controllers verwendet wird Startseite Lassen Sie uns gemeinsam lernen. Ich hoffe, es wird für alle hilfreich sein.

Zunächst werde ich Ihnen die detaillierte Erklärung der ThinkPHP-Funktionen vorstellen: M-Methode

Die M-Methode wird verwendet, um eine grundlegende Modellklasse zu instanziieren D-Methode ist:

1. Die Modellklasse muss nicht angepasst werden, wodurch die E/A-Belastung reduziert wird und die Leistung verbessert wird.

2 Standard ist die Model-Klasse. Sie können beim Instanziieren das Tabellenpräfix, die Datenbank und die Datenbankverbindungsinformationen angeben Da die Basismodellklasse der neuen Version des ThinkPHP-Frameworks jedoch immer leistungsfähiger wird, wird die M-Methode immer praktischer als die D-Methode.

M-Methodenaufrufformat:

M('[Basismodellname:] Modellname', 'Datentabellenpräfix', 'Datenbankverbindungsinformationen')

Werfen wir einen Blick auf die spezifischen Verwendungszwecke der M-Methode:

1. Instanziieren Sie die Basismodellklasse (Model)

Wenn kein Modell definiert ist, wenden wir uns an Sie Sie können die folgende Methode verwenden, um eine Modellklasse für den Betrieb zu instanziieren:

Diese Methode ist die einfachste und effizienteste, da keine Modellklasse definiert werden muss und daher projektübergreifende Aufrufe unterstützt. Der Nachteil besteht auch darin, dass es keine benutzerdefinierte Modellklasse gibt, sodass die entsprechende Geschäftslogik nicht geschrieben werden kann und nur grundlegende CURD-Operationen ausgeführt werden können.

entspricht tatsächlich:
//实例化User模型
$User = M('User');
//执行其他的数据操作
$User->select();

$User = M('User');
bedeutet, dass die think_user-Tabelle bedient wird. Die M-Methode verfügt ebenso wie die D-Methode über eine Singleton-Funktion und wird bei mehrmaligem Aufruf nicht wiederholt instanziiert. Der Modellnamensparameter der M-Methode wird bei der Konvertierung in eine Datentabelle automatisch in Kleinbuchstaben umgewandelt, was bedeutet, dass die Benennungsspezifikation für Datentabellen von ThinkPHP ausschließlich in Kleinbuchstaben vorliegt.


$User = new Model('User');
2. Andere öffentliche Modellklassen instanziieren


Die erste Möglichkeit zur Instanziierung besteht darin, dass es keine Definition der Modellklasse gibt und daher schwierig zu kapseln ist Wenn Sie eine zusätzliche Logikmethode verwenden, müssen Sie in den meisten Fällen möglicherweise nur eine allgemeine Logik erweitern. Dann können Sie die folgende Methode ausprobieren.

Die Verwendung entspricht tatsächlich:

$User = M('CommonModel:User');
Da die Modellklassen des Systems automatisch geladen werden können, müssen wir sie vor dem Import der Instanziierungsbibliothek nicht manuell klassifizieren Betrieb. Die Modellklasse CommonModel muss Model erben. Wir können einige allgemeine logische Methoden in der CommonModel-Klasse definieren, wodurch die Notwendigkeit entfällt, für jede Datentabelle spezifische Modellklassen zu definieren. Wenn Ihr Projekt bereits über mehr als 100 Datentabellen verfügt, sind die meisten davon grundlegend. Für CURD-Operationen sind dies nur einige Modelle Da es sich um eine komplexe Geschäftslogik handelt, die gekapselt werden muss, ist die Kombination der ersten Methode und der zweiten Methode eine gute Wahl.


$User = new CommonModel('User');
3. Eingehendes Tabellenpräfix, Datenbank und andere Informationen


Der erste Parameter ist der Modellname (kann die Basis enthalten). Modellklasse und Datenbank), der zweite Parameter wird verwendet, um das Präfix der Datentabelle festzulegen (leer lassen, um das Tabellenpräfix der aktuellen Projektkonfiguration zu übernehmen), und der dritte Parameter wird verwendet, um die aktuell verwendeten Datenbankverbindungsinformationen festzulegen (lassen Sie das Feld). Es ist leer, um die aktuellen Projektkonfigurations- und Datenbankverbindungsinformationen zu übernehmen. Beispiel:

bedeutet die Instanziierung der Model-Modellklasse und den Betrieb der think_user-Tabelle in der db2-Datenbank.

Wenn der zweite Parameter leer bleibt oder nicht übergeben wird, bedeutet dies, dass das Datentabellenpräfix in der aktuellen Projektkonfiguration verwendet wird. Wenn die betriebene Datentabelle kein Tabellenpräfix hat, können Sie Folgendes verwenden.
$User = M('db2.User','think_');


bedeutet, die Model-Modellklasse zu instanziieren und die Benutzertabelle in der Datenbank db1 zu betreiben.

Wenn die von Ihnen betriebene Datenbank unterschiedliche Benutzerkonten erfordert, können Sie die Verbindungsinformationen der Datenbank übergeben, zum Beispiel:
$User = M('db1.User',null);


Verwenden Sie Model, um die grundlegende Modellklasse darzustellen , und verwenden Sie dann Model für die think_user-Tabelle. Zum Betrieb verwenden Sie das user_a-Konto, um eine Verbindung zur Datenbank herzustellen. Die Betriebsdatenbank ist thinkphp.

Der dritte Verbindungsinformationsparameter kann die DSN-Konfiguration oder Array-Konfiguration verwenden und sogar Konfigurationsparameter unterstützen.
$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');

Wenn Sie beispielsweise Folgendes konfigurieren:

in der Projektkonfigurationsdatei, können Sie Folgendes verwenden:

'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';
Die grundlegende Modellklasse und Datenbank können zusammen verwendet werden, zum Beispiel:


$User = M('User','think_','DB_CONFIG');
Wenn Sie ein hierarchisches Modell mithilfe der öffentlichen Modellklasse instanziieren möchten, können wir Folgendes verwenden:


$User = M('CommonModel:db2.User','think_');
um UserLogic zu instanziieren, obwohl dies wenig Sinn macht, da die gleiche Funktion mit


M('UserLogic:User');
erreicht werden kann.


D('User','Logic');
Detaillierte Erläuterung der ThinkPHP-Funktionen: R-Methode


Mit der R-Methode wird die Betriebsmethode eines Controllers aufgerufen, was eine weitere Verbesserung und Ergänzung darstellt der A-Methode. Informationen zur Verwendung von Methode A finden Sie hier.

R-Methodenaufrufformat:

R('[Project://][Group/]Module/Operation','Parameter','Controller-Layer-Name')

Wenn wir beispielsweise eine Operationsmethode wie folgt definieren:

, dann kann diese Operationsmethode in anderen Controllern über R-Methoden aufgerufen werden (im Allgemeinen werden R-Methoden für modulübergreifende Aufrufe verwendet)

$data = R('User/detail',array('5'));

表示调用User控制器的detail方法(detail方法必须是public类型),返回值就是查询id为5的一个用户数据。如果你要调用的操作方法是没有任何参数的话,第二个参数则可以留空,直接使用:

$data = R('User/detail');

也可以支持跨分组和项目调用,例如:

R('Admin/User/detail',array('5'));

表示调用Admin分组下面的User控制器的detail方法。

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方法的调用方式。

相关推荐:

详解ThinkPHP5 instance的实现

ThinkPHP下表单令牌错误的分析与解决

详解ThinkPHP如何实现生成和校验验证码

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der M-Methode und der R-Methode der TP3-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn