Bien que Model-View-Controller (MVC) soit bien connu de presque tous les développeurs Web, comment est-il utilisé dans le développement d'applications réelles ? de MVC dérange encore beaucoup de gens. L'idée centrale derrière MC est la réutilisabilité du code et la séparation de la logique et des vues . Dans cette section, nous décrirons comment mieux utiliser MVC pour développer des applications lors de l'utilisation du framework Yii.
Pour une meilleure explication, nous supposons que l'application Web contient les sous-applications suivantes :
Front-end : une interface de site Web publique pour les utilisateurs finaux ;
Backend : fournit des fonctions de gestion pour gérer l'ensemble de l'application du site Web, généralement seuls les administrateurs peuvent accéder et utiliser
Console : peut être exécutée dans une fenêtre de terminal ; Applications contenant des commandes de console ;
API Web : fournit une interface permettant aux tiers d'interagir avec cette application.
Ces sous-applications peuvent être implémentées sous forme de modules, ou il peut s'agir d'applications Yii qui partagent du code avec d'autres sous-applications.
Les modèles représentent la structure de données sous-jacente d'une application Web. Les modèles sont souvent partagés entre différentes sous-applications d'une application Web. Par exemple, un modèle LoginForm
peut être. utilisé à la fois par le front-end et le back-end d'une application ; un modèle News
peut être utilisé par les commandes de la console, les API Web et le front/back-end d'une application. Par conséquent, les modèles
, en plus de représenter les données d'entrée de la recherche, peut contenir une méthode SearchForm
pour implémenter la recherche réelle.search
qui n'est utilisée que par le front-end ; il peut également contenir une méthode nommée News
qui n'est utilisée que par le back-end. Cela peut convenir pour une application de petite à moyenne taille. size. Pour les applications volumineuses, la stratégie suivante peut être utilisée pour rendre les modèles plus maintenables :getLatestNews
getDeletedNews
NewsBase
tout le code spécifique à la sous-application. dans ce modèle News
.NewsBase
News
méthode, et nous ajouterions un autre modèle News
dans l'application back-end, qui contient uniquement la méthode getLatestNews
.News
getDeletedNews
En général, les modèles ne doivent pas contenir de logique qui traite directement avec les utilisateurs finaux. Plus précisément, les modèles
ou d'autres variables similaires directement liées à la demande de l'utilisateur final. N'oubliez pas qu'un modèle peut être utilisé par. une sous-application totalement différente (par exemple test unitaire, API Web) qui ne peut pas utiliser ces variables pour représenter les demandes des utilisateurs. Ces variables relatives à la demande de l'utilisateur doivent être gérées par le contrôleur.$_GET
$_POST
peut accéder directement aux propriétés et méthodes des contrôleurs et des modèles. Toutefois, cela ne doit être fait qu'à des fins de présentation.
Les vues peuvent être réutilisées de différentes manières :
Mise en page : zones de présentation communes (par exemple, en-tête de page, pied de page) peuvent être placés dans une vue de mise en page.
Vues partielles : utilisez des vues partielles (vues qui ne sont pas décorées par des mises en page) pour réutiliser des fragments de code de présentation. Par exemple, nous utilisons _form.php
la vue partielle pour afficher le formulaire de saisie du modèle qui est utilisé à la fois dans les pages de création et de mise à jour du modèle.
Widgets : si beaucoup de logique est nécessaire pour présenter une vue partielle, la vue partielle peut être transformée en un widget dont le fichier de classe est le meilleur endroit pour contenir cette logique. Pour les widgets qui génèrent beaucoup de balisage HTML, il est préférable d'utiliser des fichiers de vue spécifiques au widget pour contenir le balisage.
Classes d'assistance : dans les vues, nous avons souvent besoin de quelques extraits de code pour effectuez de petites tâches telles que le formatage des données ou la génération de balises HTML. Plutôt que de placer ce code directement dans les fichiers de vue, une meilleure approche consiste à placer tous ces extraits de code dans une classe d'assistance de vue. Ensuite, utilisez simplement la classe d'assistance dans vos fichiers de vue. Yii fournit un exemple de cette approche. Yii dispose d'une puissante classe d'assistance CHtml qui peut produire du code HTML couramment utilisé. Les classes d'assistance peuvent être placées dans un répertoire téléchargeable automatiquement afin qu'elles puissent être utilisées sans inclusion explicite de classe.
Les contrôleurs sont le ciment qui lie les modèles, les vues et les autres composants dans une application exécutable. Les contrôleurs sont chargés de traiter directement les demandes des utilisateurs finaux. Par conséquent, les contrôleurs
peuvent accéder à $_GET
, $_POST
et à d'autres variables PHP qui représentent les demandes des utilisateurs ;
peuvent créer des instances de modèle et gérer leurs cycles de vie. Par exemple, dans une action typique de mise à jour de modèle, le contrôleur peut d'abord créer l'instance de modèle ; puis remplissez le modèle avec l'entrée utilisateur de$_POST
; après avoir enregistré le modèle avec succès, le contrôleur peut rediriger le navigateur de l'utilisateur vers la page de détails du modèle. Notez que l'implémentation réelle de l'enregistrement d'un modèle doit être située dans le modèle plutôt que dans le contrôleur.
doit éviter de contenir des instructions SQL intégrées, qui sont mieux conservées dans les modèles.
doit éviter de contenir du HTML ou tout autre balisage de présentation. Ceci est mieux conservé dans les vues.
Dans une application MVC bien conçue, les contrôleurs sont souvent très minces, ne contenant probablement que quelques dizaines de lignes de code ; tandis que les modèles sont très volumineux, contenant la majeure partie du code responsable de la représentation et de la manipulation des données. En effet, la structure des données et la logique métier représentées par les modèles sont généralement très spécifiques à une application particulière et doivent être fortement personnalisées pour répondre aux exigences spécifiques de l'application ; tandis que la logique du contrôleur suit souvent un modèle similaire dans toutes les applications et peut donc être simplifiée par le cadre sous-jacent ou les classes de base. ,更多相关内容请关注PHP中文网(www.php.cn)!