Maison >développement back-end >tutoriel php >Explication détaillée des fonctions ThinkPHP : méthode M et méthode R
Cet article présente principalement la méthode M et la méthode R sur l'explication détaillée des fonctions ThinkPHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
. Tout d'abord, je vais vous le donner en présentant 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. Aucune classe de modèle personnalisée n'est requise, réduisant le chargement des E/S, bonnes performances
2 Après l'instanciation, seules les méthodes de la classe de modèle de base (la classe par défaut est Model) peuvent être appelées. ;
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 la puissance de la classe de modèle personnalisée que vous encapsulez. Oui, mais avec la nouvelle version de la classe de modèle de base du framework ThinkPHP, les fonctions deviennent de plus en plus puissantes, et la méthode M est 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 pour une opération :
//实例化User模型 $User = M('User'); //执行其他的数据操作 $User->select();
Cette méthode est la plus simple et la plus efficace car il n'est pas nécessaire de définir quoi que ce soit. model class , les appels inter-projets sont donc pris en charge. 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');
représente l'opération surface 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 dans un format 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, il est donc difficile d'encapsuler une logique supplémentaire méthodes, mais dans la plupart des cas, vous aurez peut-être simplement besoin d'étendre une logique générale, vous pouvez alors essayer la méthode suivante.
$User = M('CommonModel:User');
est en fait équivalent à :
$User = new CommonModel('User');
Parce que le système les classes de modèles peuvent être chargées automatiquement, nous n'avons pas besoin d'importer manuellement la bibliothèque de classes avant l'instanciation. 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 classe du modèle de base 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 vide pour prenez la connexion à la base de données de la configuration actuelle du projet) informations), par exemple :
$User = M('db2.User','think_');
signifie instancier la classe de modèle Model et utiliser la table think_user dans le 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 à la base de données, par exemple :
$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');
représente la classe model de base utilise Model, puis exploite la table think_user, utilise le compte user_a pour se connecter à la base de données et 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');
Les classes de modèles de base et les bases de données peuvent être utilisées ensemble, par exemple :
$User = M('CommonModel:db2.User','think_');
Si vous souhaitez instancier la superposition Quant au modèle, en utilisant la classe de modèle publique, nous pouvons utiliser :
M('UserLogic:User');
pour instancier UserLogic, bien que cela ne fasse pas beaucoup de sens, car il peut utiliser
D('User','Logic');
pour obtenir la même fonction.
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 certain contrôleur, qui est une amélioration et un complément supplémentaires de la Une méthode. 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 de fonctionnement comme :
class UserAction extends Action { public function detail($id){ return M('User')->find($id); } }
那么就可以通过R方法在其他控制器里面调用这个操作方法(一般R方法用于跨模块调用)
$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方法的调用方式。
以上内容给大家分享了ThinkPHP函数详解之M方法和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!