En savoir plus OK
Accueil Cours Créer une application Bootstrap avec le mkFramework
Introduction
Dans le précédent cours, je vous ai présenté un framework php différent : le mkframework.
Nous allons ici utiliser ce même framework pour créer une application Bootstrap.
Pour ce cours nous allons developper une application qui permettra d'administrer des contacts.
Installation
Rendez-vous à l'adresse du framework http://mkframework.com/ pour télécharger la dernière version de celui-ci.
Vous avez sur cette page plusieurs moyens de récupérer le framework : subversion, github, composer ou via une archive zip.
Nous allons ici télécharger l'archive zip. Désarchivez celle-ci dans le répertoire web de votre ordinateur.
Le lien donné contient le numéro de la version du framework téléchargé. Adaptez ce lien en fonction du nom de l'archive téléchargée.
Vous venez d'installer le framework, ou plutôt le « Builder », c'est le générateur web du framework : il vous permettra de créer vos sites et de les administrer facilement.
Entrez dans le champ texte "projetBootstrap", cochez "Application compatible bootsrap" et validez.
Le builder vous redirige sur la page d'administration des projets ; vous voyez ici tous les projets créés avec le framework. Ici on voit notre projet nouvellement généré.
Créons nos tables dans la base de données
Pour ce cours, nous allons créer deux tables : "contact" et "groupe" dans une base mysql "projetBootstrapDb".
sql
1 CREATE TABLE `contact` (
2 `cont_id` int(11) NOT NULL auto_increment,
3 `cont_lastname` varchar(50) NOT NULL,
4 `cont_fistname` varchar(50) NOT NULL,
5 `cont_picture` varchar(100) NOT NULL,
6 `cont_phone` varchar(100) NOT NULL,
7 `group_id` int(11) NOT NULL,
8 PRIMARY KEY (`cont_id`)
9 );
10 CREATE TABLE `groupe` (
11 `group_id` int(11) NOT NULL auto_increment,
12 `group_name` varchar(50) NOT NULL,
13 PRIMARY KEY (`group_id`)
14 );
Les connexions aux bases de données se paramètrent dans le fichier conf/connexion.ini.php de votre projet.
Vous pouvez soit éditer le fichier avec votre éditeur de code, soit utiliser le builder.
La couche modèle
Le mkFramework utilisant une architecture MVC*, il nécessite des classes modèle pour interagir avec la/les base de données.
Pour la table "groupe", cochez "Retourne un tableau avec" et sélectionnez en valeur "group_name". Ceci permet lors de la création de la classe "groupe"
d'ajouter une méthode permettant de retourner un tableau indexé id/nom (très utile par la suite).
Validez avec le bouton Générer , le builder vous créera deux classes "model_contact.php" et "model_groupe.php" dans le répertoire "model/" de votre application.
Voici un exemple de la classe modèle "contact" :
php
1 <?php
2 class model_contact extends abstract_model{
3
4 protected $sClassRow='row_contact';
5
6 protected $sTable='contact';
7 protected $sConfig='maBaseMysql';
8
9 protected $tId=array('cont_id');
10
11 public static function getInstance(){
12 return self::_getInstance(__CLASS__);
13 }
14
15 public function findById($uId){
16 return $this‐>findOne('SELECT * FROM '.$this‐>sTable.' WHERE cont_id=?',$uId );
17 }
18 public function findAll(){
19 return $this‐>findMany('SELECT * FROM '.$this‐>sTable);
20 }
21
22
23 }
La classe modèle permet d'exécuter des requêtes et de recupérer leur retour soit sous forme de tableau (findMany) soit sous forme d'un objet unique (findOne).
Lorsqu'elle vous retourne un objet, c'est une instance de la classe "row_matable" indiqué dans $sClassRow qui ressemble à ceci :
php
1 <?php class row_contact extends abstract_row{
2
3 protected $sClassModel='model_contact';
4
5 /*exemple jointure
6 public function findAuteur(){
7 return model_auteur::getInstance()‐>findById($this‐>auteur_id);
8 }
9 */
10 /*exemple test validation*/
11 private function getCheck(){
12 $oPluginValid=new plugin_valid($this‐>getTab());
13 /* renseigner vos check ici
14 $oPluginValid‐>isEqual('champ','valeurB','Le champ n\est pas égal à '.$valeurB);
15 $oPluginValid‐>isNotEqual('champ','valeurB','Le champ est égal à '.$valeurB);
16 $oPluginValid‐>isUpperThan('champ','valeurB','Le champ n\est pas supé à '.$valeurB);
17 $oPluginValid‐>isUpperOrEqualThan('champ','valeurB','Le champ n\est pas supé ou égal à '.$valeurB);
18 $oPluginValid‐>isLowerThan('champ','valeurB','Le champ n\est pas inférieur à '.$valeurB);
19 $oPluginValid‐>isLowerOrEqualThan('champ','valeurB','Le champ n\est pas inférieur ou égal à '.$valeurB);
20 $oPluginValid‐>isEmpty('champ','Le champ n\'est pas vide');
21 $oPluginValid‐>isNotEmpty('champ','Le champ ne doit pas être vide');
22 $oPluginValid‐>isEmailValid('champ','L\email est invalide');
23 $oPluginValid‐>matchExpression('champ','/[0‐9]/','Le champ n\'est pas au bon format');
24 $oPluginValid‐>notMatchExpression('champ','/[a‐zA‐Z]/','Le champ ne doit pas être a ce format');
25 */
26
27 return $oPluginValid;
28 }
29
30 public function isValid(){
31 return $this‐>getCheck()‐>isValid();
32 }
33 public function getListError(){
34 return $this‐>getCheck()‐>getListError();
35 }
36 public function save(){
37 if(!$this‐>isValid()){
38 return false;
39 }
40 parent::save();
41 return true;
42 }
43
44 }
Lorsque vous instanciez un objet avec cette classe, celle-ci représente un enregistrement de votre base de données, vous pouvez ainsi simplement modifier un champ
et l'enregistrer ainsi :
php
1 <?php
2 $oContact=model_contact::getInstance()‐>findById(1);
3
4 //on peut simplement modifié les champs
5 $oContact‐>cont_firstname='Victor';
6 $oContact‐>cont_lastname='Hugo';
7 //et enregistrer
8 $oContact‐>save();
CRUD signifie Create Read Update Delete, ce sigle désigne les actions permettant d'administrer une table.
Le builder vous permet en quelques clics de générer ce CRUD facilement.
Le builder vous liste les classes modèles disponibles dans votre projet.
Il vous donne également la possibilité d'indiquer un libellé pour chaque champ de la table. Modifiez le libellé du champ "group_name" pour "Nom" et validez.
Validez.
Lorsque vous validez, le builder vous indique les répertoires et fichiers créés, de plus il vous affiche un lien pour voir le module CRUD généré. En cliquant dessus,
vous pouvez voir le module :
Le menu
Générons un module menu
Le builder vous propose également, afin de vous faciliter le développement : de générer un module menu, pour cela, cliquez sur Créer un module menu bootstrap .
Le builder vous liste les modules qu'il peut voir dans votre répertoire module. Vous pouvez ici cochez les méthodes et indiquer un libéllé pour le lien à créer dans le
menu.
Ici, cochez la méthode "_list()" du module "groupe" et indiquez un libellé pour ce lien, faites de même pour la méthode "_list()" du module "contact" et un dernier pour
une page d'accueil.
Le builder vous indique les répertoires et fichiers créés, mais il vous affiche également le code pour inclure ce menu dans votre application.
Ce code demande au framework d'ajouter à l'emplacement "menu" l'appel de la méthode "_index()" du module "menu"
Copiez ce code.
Le code affiché précédement d'intégration de menu est le plus souvent intégré à la fin de la méthode before() dans vos modules.
Cliquez sur le lien "explorer le projet' (ou utilisez votre éditeur de code pour modifier les fichiers qui suivent)
Ici il nous faut modifier les fichiers "main.php" de chaque module pour inclure le code précédement copié.
Ainsi :
php
1 <?php
2 class module_contact extends abstract_module{
3
4 public function before(){
5 $this‐>oLayout=new _layout('bootstrap');
6
7 //ici le chargement du menu a l'emplacement "menu"
8 $this‐>oLayout‐>addModule('menu','menu::index');
9 }
Application terminée
L'application est terminée, vous pouvez cliquez sur voir le site pour voir le site généré.
Vous voyez votre application avec le menu permettant de voir la page d'accueil, ainsi que les groupes et les contact, notez qu'en réduisant la largeur de votre site, le
menu change ainsi :
Le menu se déplie, c'est ce qui se passera en naviguant avec un smartphone sur votre site.
1. Vous avez pour la photo un bouton pour télécharger une image sur votre ordinateur.
2. Vous avez pour le groupe un menu déroulant pour sélectionner les groupes précédement ajoutés.
Il y a un petit souci : on affiche pour la colonne photo l'adresse du fichier uploadé, modifions notre module contact pour afficher une petite image à la place.
Vous avez pu dans ce cours apprécier la facilité d'utilisation de ce framework ainsi que de son builder.
J'espère vous avoir convaincu de laisser une chance à ce framework qui se veut différent.
Certains débutants ne sont pas familier de la ligne de commande et apprécient son builder, d'autres apprécient sa modularité et sa non régression depuis 2009 (point
très rare aujourd'hui).
L'auteur
Michael
OpenClassrooms Professionnels Participez Suivez-nous
Qui sommes-nous ? Affiliation Créer un cours Le blog OpenClassrooms
Fonctionnement de nos coursEntreprises CourseLab
Recrutement Universités et écolesAider à traduire
Nous contacter Conditions Générales d'Utilisation