Action :
Introduction
Sommaire |
Modèle - Vue - Contrôleur
Le mécanisme de fonctionnement de Nano repose sur le modèle MVC (Model-View-Controller) ce qui présente quelques avantages lorsque l'on veut faire une application web. Ce modèle impose une séparation entre les données, leur traitement et l'affichage, chacune des trois partie de ce modèle s'occupant respectivement d'une de ces tâches :
- Le modèle s'occupe de gérer les données, dans notre cas c'est Database
- Le contrôleur s'occupe de traiter ces données tout en gérant les requetes provenant d'un visiteur.
- La vue s'occupe de la mise en page.
Bien-sûr, ces différentes parties sont capables de communiquer entre-elles suivant ce simple schéma :
Lorsqu'un visiteur clique sur un lien ou soumet un formulaire, les informations sont envoyées au contrôleur qui peut alors effectuer le traitrement correspondant tout en ayant accès à la base de données grâce au modèle, ensuite, les informations résultantes de ce traitement sont envoyées à leur tour à la vue qui affichera le résultat sous la forme d'une page web la plupart du temps, on peut aussi imaginer que l'on puisse retourner autre chose que de l'html comme du XML, JSON, PDF... juste en changeant le fichier correspondant à la vue
Architecture d'une application
Les fichiers
Pour que tout cela puisse fonctionner correctement, une architecture est imposée, voici comment une application est organisée :
Les fichiers qui composent l'application sont placés dans le repertoire app : les actions dans controllers et les vues dans views. Il existe aussi un répertoire locale qui contiendra les fichiers utilisés pour faire une application multilingues mais nous verra ça plus tard.
- Le répertoire apps contient tout ce qui est relatif aux applications comme les actions, les vues et les fichiers de traduction pour l'internationalisation.
- Vous pourrez placer vos extensions dans lib, ce répertoire est ajouté automatiquement au chemin de recherche pour les fonction include ou require.
- Les modèles de données sont générés dans models
- Pour le reste, les nom des répertoires sont assez parlant.
Avant tout, il faut configurer Nano. Tous les fichiers de configuration sont regroupés dans le répertoire config, il y a déjà des fichiers par defaut qui son nommés <nom>.defaut.php, copiez les en enlevant le defaut et adaptez les à votre configuration. En général les noms des paramètres sont assez parlants pour savoir à quoi ils correspondent, si vous ne savez pas, ne changez pas.
Les actions
Lorsque vous essayez d'acceder à une page Nano décompose l'url et en extrait l'action à exécuter et en déduit la vue à afficher (si vous n'avez pas encore lu l'introduction, faites le maintenant)
Par exemple si vous voulez afficher la page : www.monsite.com/accueil/index Nano exécutera l'action index du contrôleur accueil à condition que le fichier app/controllers/accueil.php existe et qu'il contienne bien une classe héritée de Controller ayant une méthode index.
Il ne vous reste plus qu'a créer ce fichier :
/** * Controleur accueil * * @package Controller * @author <votre nom> */ class AccueilController extends Controller { function __construct() { parent::__construct(); $this->layout = 'layout'; } public function index() { } }
Vous pouvez placer dans la méthode index tout le traitement que vous souhaitez. De plus vous pouvez déclarer ici des propriétés qui seront accessibles plus tard depuis la vue assez simplement en faisant par exemple: $this->view->message = 'hello world';
Les vues
Vous avez sûrement remarqué la ligne avec le layout dans le constructeur du contrôleur, c'est juste qu'on dit au contrôleur que la vue utilisera un layout par defaut pour toutes les actions (cela dit, rien ne vous empèche de définir un layout spécifique dans chaque action en redéfinissant la propriété dans l'action correspondante)
IMAGE--
Créez le fichier layout.php dans app/views/layout, c'est un simple fichier html dans lequel Nano inserrera la vue :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR" lang="fr-FR"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title><?php echo render_for_title(); ?></title> <?php echo render_for_meta(); ?> </head> <body> <?php echo $content_for_layout; ?> </body> </html>
Le fichier correspondant à la vue sera inserré à la place de <?php echo $content_for_layout; ?>. Ce fichier est placé dans le répertoire app/views/<nom du contrôleur>/<nom de l'action>.php, dans notre cas : app/views/accueil/index.php




