Le paradigme MVC est un moyen de diviser une application, ou même simplement un élément de l'interface d'une application, en trois parties : le modèle, la vue et le contrôleur.
MVC a été développé à l'origine pour transposer les rôles traditionnels d'entrée, de traitement et de sortie dans le domaine des interfaces graphiques :
Veuillez vous référer : :
Zend Framework : Survivre aux profondeurs de l'océan
Pour plus d'informations sur le mvc en PHP, vous pouvez consulter les liens ci-dessous, qui sont particulièrement utiles pour les débutants.
- Modèle vue contrôleur (MVC) en PHP
- Implémentation de MVC en PHP : Le modèle
- MVC pour les novices
- Architecture MVC dans le développement PHP
Modèle
Un modèle est un objet représentant des données ou même une activité, par exemple une table de base de données ou même un processus de machine de production dans l'usine.
Le modèle gère le comportement et les données du domaine d'application, répond aux demandes d'informations sur son état et répond aux instructions de changement d'état.
Le modèle représente les données de l'entreprise et les règles métier qui régissent l'accès à ces données et leur mise à jour. Souvent, le modèle sert d'approximation logicielle à un processus du monde réel, de sorte que des techniques simples de modélisation du monde réel s'appliquent lors de la définition du modèle.
Le modèle est la pièce qui représente l'état et le comportement de bas niveau du composant. Il gère l'état et effectue toutes les transformations sur cet état. Le modèle n'a aucune connaissance spécifique de ses contrôleurs ou de ses vues. La vue est la pièce qui gère l'affichage visuel de l'état représenté par le modèle. Un modèle peut avoir plus d'une vue.
Voir
Une vue est une forme de visualisation de l'état du modèle. La vue gère la sortie graphique et/ou textuelle sur la partie de l'affichage en mode point qui est allouée à son application. Au lieu d'un affichage en mode point, la vue peut générer une sortie HTML ou PDF.
La vue rend le contenu d'un modèle. Elle accède aux données de l'entreprise par le biais du modèle et spécifie comment ces données doivent être présentées.
La vue est responsable du mappage des graphiques sur un périphérique. Une vue a généralement une correspondance univoque avec une surface d'affichage et sait comment effectuer un rendu sur celle-ci. Une vue s'attache à un modèle et rend son contenu sur la surface d'affichage.
Contrôleur
Un contrôleur permet de modifier l'état du modèle. Le contrôleur interprète les entrées de la souris et du clavier de l'utilisateur, et commande le modèle et/ou la vue pour qu'ils changent comme il convient.
Un contrôleur est le moyen par lequel l'utilisateur interagit avec l'application. Il accepte les données de l'utilisateur et demande au modèle et à la vue d'effectuer des actions en fonction de ces données. En fait, le contrôleur est responsable de la correspondance entre l'action de l'utilisateur final et la réponse de l'application.
Le contrôleur traduit les interactions avec la vue en actions à exécuter par le modèle. Dans un client GUI autonome, les interactions de l'utilisateur peuvent être des clics de bouton ou des sélections de menu, alors que dans une application Web, elles se présentent sous la forme de requêtes HTTP GET et POST. Les actions réalisées par le modèle comprennent l'activation de processus métier ou la modification de l'état du modèle. En fonction des interactions de l'utilisateur et du résultat des actions du modèle, le contrôleur répond en sélectionnant une vue appropriée.
Le contrôleur est la pièce qui gère l'interaction de l'utilisateur avec le modèle. Il fournit le mécanisme par lequel les changements sont apportés à l'état du modèle.
Un exemple de modèle en Zend Framework dans lequel je travaille .
<?php
class Default_Model_Check extends Zend_Db_Table {
protected $_name = 'Check'; // This is the Table which is defined here since we have already defined our working database.
public function CheckUsername($username) { // Which just need to pass the username to check the condition
$sql = "SELECT Username FROM" . $this->usersTableName . " WHERE Username = :Username"; // Our query
// Exception handling here
try{
$result = $this->getDefaultAdapter()->fetchAll($sql);
if (count($result)>0){
return $result;
}
}
catch(Exception $e){
$errlog = Zend_Controller_Action_HelperBroker::getStaticHelper('errorlog');
$errlog->direct("Check.CheckUsername : " . $e->getMessage());
}
return false;
}
}
?>
1 votes
phpro.org/tutorials/Model-View-Controller-MVC.html
136 votes
Pourquoi récupérez-vous les exceptions juste pour les relancer ?
9 votes
@Elias Van Ootegem : vous n'avez pas compris. Il est inutile de les attraper dans ce cas.
4 votes
@Elias Van Ootegem : huh ? si cela fonctionne avec rethrow, cela signifie qu'une couche supérieure attrape l'exception. Mais s'il y en a une, alors elle l'aurait attrapée sans ce rethrow inutile... (si vous ne comprenez toujours pas, faites un petit code de test).
3 votes
@Elias Van Ootegem : Je n'ai aucune idée de ce dont vous parlez, ne pas traiter une exception sur une couche spécifique ne signifie pas que cela arrêtera l'application. s'il vous plaît, construisez (ou plus précisément : ne construisez pas) un exemple de code où ce rethrow est nécessaire. arrêtons cette conversation hors sujet, s'il vous plaît
6 votes
@drrcknlsn : c'est un argument valable, mais dans ce cas, il faut au moins attraper l'exception que vous attendez, l'exception générique.
Exception
n'a pas une grande valeur documentaire. Personnellement, si je m'engageais dans cette voie, je choisirais la méthode de PHPDoc@exception
ou un mécanisme similaire, afin qu'il apparaisse dans la documentation générée.0 votes
@KarolyHorvath : Je ne suis pas nécessairement en désaccord, au moins dans les cas où seule une exception spécifique pourrait être lancée, mais parfois il pourrait littéralement y avoir des dizaines d'exceptions différentes possibles, et attraper ou documenter chacune d'entre elles explicitement serait quelque peu peu peu pratique si votre seule intention est de les relancer. Si vous ne prévoyez qu'une seule exception spécifique, ou si la bibliothèque que vous encapsulez utilise une bonne gestion des exceptions et de l'héritage, alors il est préférable de le faire.
0 votes
Je cherchais justement celle-ci ; excellente question et bon exemple.
1 votes
Il est parfaitement acceptable (et parfois courant) d'attraper des exceptions pour les relancer à nouveau sous la forme d'une exception différente, en fonction de l'état de l'api de votre objet.