Cet article présente en détail la méthode M et la méthode R des fonctions ThinkPHP3. La méthode M est utilisée pour instancier une classe de modèle de base, tandis que la méthode R est utilisée pour appeler la méthode de fonctionnement d'un certain contrôleur. Accueil Apprenons ensemble. J’espère que cela sera utile à tout le monde.
Tout d'abord, je vais vous présenter l'explication détaillée des fonctions ThinkPHP : Méthode M
La méthode M est utilisée pour instancier une classe de modèle de base La différence avec. La méthode D est :
1. Pas besoin de personnaliser la classe de modèle, ce qui réduit le chargement des E/S et améliore les performances
2. Classe modèle) peut être appelé après l'instanciation ;
3. Vous pouvez spécifier le préfixe de la table, la base de données et les informations de connexion à la base de données lors de l'instanciation ; La puissance de la méthode
D se reflète dans quelle est la puissance de la classe de modèle personnalisée que vous encapsulez, mais à mesure que la classe de modèle de base de la nouvelle version du framework ThinkPHP devient de plus en plus puissante, la méthode M devient de plus en plus pratique que la méthode D.
Format d'appel de la méthode M :
M('[Nom du modèle de base :] Nom du modèle', 'Préfixe de la table de données', 'Informations de connexion à la base de données')
Regardons les utilisations spécifiques de la méthode M :
1 Instancier la classe du modèle de base (Model)
Lorsqu'aucun modèle n'est défini, nous vous. peut utiliser la méthode suivante pour instancier une classe de modèle à utiliser :
//实例化User模型 $User = M('User'); //执行其他的数据操作 $User->select();
Cette méthode est la plus simple et la plus efficace, car elle n'a pas besoin de définir de classe de modèle, elle prend donc en charge les appels inter-projets. L'inconvénient est également qu'il n'existe pas de classe de modèle personnalisée, de sorte que la logique métier appropriée ne peut pas être écrite et que seules les opérations CURD de base peuvent être effectuées.
$User = M('User');
est en fait équivalent à :
$User = new Model('User');
signifie faire fonctionner la table think_user. La méthode M possède également une fonction singleton comme la méthode D, et elle ne sera pas instanciée à plusieurs reprises si elle est appelée plusieurs fois. Le paramètre de nom de modèle de la méthode M sera automatiquement converti en minuscules lors de la conversion en table de données, ce qui signifie que la spécification de dénomination de table de données de ThinkPHP est entièrement en minuscules.
2. Instancier d'autres classes de modèles publics
La première façon d'instancier est qu'il n'y a pas de définition de la classe de modèle, elle est donc difficile à encapsuler. une méthode logique supplémentaire, mais dans la plupart des cas, vous devrez peut-être simplement étendre une logique générale, vous pouvez alors essayer la méthode suivante.
$User = M('CommonModel:User');
L'utilisation est en fait équivalente à :
$User = new CommonModel('User');
Étant donné que les classes de modèles du système peuvent être automatiquement chargées, nous n'avons pas besoin de les classer manuellement avant l'importation de la bibliothèque d'instanciation opération. La classe de modèle CommonModel doit hériter de Model. Nous pouvons définir certaines méthodes logiques communes dans la classe CommonModel, ce qui élimine le besoin de définir des classes de modèles spécifiques pour chaque table de données. Si votre projet contient déjà plus de 100 tables de données, la plupart d'entre elles sont basiques. Pour les opérations CURD, seuls certains modèles en ont. une logique métier complexe qui doit être encapsulée, donc la combinaison de la première méthode et de la deuxième méthode est un bon choix.
3. Préfixe de la table entrante, base de données et autres informations
La méthode M a trois paramètres Le premier paramètre est le nom du modèle (peut inclure la base. classe de modèle et base de données), le deuxième paramètre est utilisé pour définir le préfixe de la table de données (laisser vide pour prendre le préfixe de table de la configuration actuelle du projet), et le troisième paramètre est utilisé pour définir les informations de connexion à la base de données actuellement utilisées (laisser il est vide pour prendre la configuration actuelle du projet) les informations de connexion à la base de données), par exemple :
$User = M('db2.User','think_');
signifie instancier la classe de modèle Model et exploiter la table think_user dans la base de données db2.
Si le deuxième paramètre est laissé vide ou n'est pas transmis, cela signifie utiliser le préfixe de la table de données dans la configuration actuelle du projet. Si la table de données exploitée n'a pas de préfixe de table, vous pouvez utiliser :
$User = M('db1.User',null);
signifie instancier la classe de modèle Model et exploiter la table user dans la base de données db1.
Si la base de données que vous exploitez nécessite différents comptes d'utilisateurs, vous pouvez transmettre les informations de connexion de la base de données, par exemple :
$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');
Utilisez Model pour représenter la classe de modèle de base , puis utilisez Model pour la table think_user Pour fonctionner, utilisez le compte user_a pour vous connecter à la base de données. La base de données d'exploitation est thinkphp.
Le troisième paramètre d'informations de connexion peut utiliser la configuration DSN ou la configuration du tableau, et peut même prendre en charge les paramètres de configuration.
Par exemple, si vous configurez :
'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';
dans le fichier de configuration du projet, vous pouvez utiliser :
$User = M('User','think_','DB_CONFIG');
La classe de modèle de base et la base de données peuvent être utilisés ensemble, Par exemple :
$User = M('CommonModel:db2.User','think_');
Si vous souhaitez instancier un modèle hiérarchique, en utilisant la classe de modèle public, nous pouvons utiliser :
M('UserLogic:User');
pour instancier UserLogic , même si cela n'a pas beaucoup de sens, car la même fonction peut être réalisée avec
D('User','Logic');
.
Explication détaillée des fonctions ThinkPHP : méthode R
La méthode R est utilisée pour appeler la méthode de fonctionnement d'un contrôleur, ce qui constitue une amélioration et un complément supplémentaires de la méthode A. Voir ici pour l'utilisation de la méthode A.
Format d'appel de la méthode R :
R('[Project://][Group/]Module/Operation','Parameter','Controller layer name')
Par exemple, nous définissons une méthode d'opération comme :
class UserAction extends Action { public function detail($id){ return M('User')->find($id); } }
Ensuite, vous pouvez appeler cette méthode d'opération dans d'autres contrôleurs via la méthode R (généralement la méthode R est utilisée pour les appels inter-modules)
$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方法的调用方式。
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!