Créer sont propre MVC en PHP

Bonjour,

Dans l’univers des blogs sur le développement, il est difficile de faire le tri et parfois quand on cherche un tutoriel simple sur un sujet en particulier, on s’y perds. Un excellent blog que je vous recommande si vous cherchez à apprendre le PHP c’est le blog http://www.grafikart.fr, c’est pratiquement des cours d’informatique mais en plus cool et à la maison en plus. La qualité est au rendez vous, et c’est un plaisir de suivre ces vidéos, toutes très bien détaillés. J’aime encore plus le fait que l’auteur ne coupe pas au montage les erreurs qu’il fait en codant devant nous, et nous explique quelle est l’erreur qu’il à fait tout en la corrigeant en direct.

Une de ces vidéo explique en détail comment réaliser un MVC en PHP, cela dure environs 40 minutes et si vous avez le temps je vous le conseil vivement, sinon je vous propose un rapide survole du sujet que je trouve très instructif.

Je ne parlerais pas ici du M(Modèle) de MVC mais juste de la partie Vue-Contrôleur.

Le principe est assez simple : il faut tout d’abord rediriger les urls de notre site vers un « dispatcheur », qui va nous diriger vers le bon fichier.

Pour cela on va activer le mode RewriteEngine de php dans un fichier .htaccess

htaccess

Ces deux lignes renverrons toutes les urls vers le fichier index.php qui sera notre dispatcheur.

voyons maintenant ce dispatcheur de plus près :

index

Ce qu’il y a d’important ici, c’est qu’on devine le fonctionnement de notre système MVC, par exemple si vous taper http://mon_site_mvc/employe/new

La variable $controller va avoir comme valeur employe ($param[0]), puis l’action sera new ($param[1]), ensuite on contrôle si l’action existe bien dans notre contrôleur, si oui on l’appel avec $controller->$action() sinon on redirige vers une page 404.

Voyons notre contrôleur :

Mcontrolleur

Ceci est la classe mère, d’ou les autres contrôleur hériterons et voici le contrôleur tutoriels que j’ai créée pour le tutoriel justement et qui hérite de la classe ci dessus :

Control

A partir de ces deux fichiers, que peux on dire ?

La seule page que je pourrait appeler pour l’instant, c’est tutoriels/index puisque je n’ais que le contrôleur tutoriels et l’action index d’implémenté.

Voyons ce qu’il ce passera : j’instancie le tableau $d[‘tuto’] avec mon nom et mon prénom, dans la réalité ça serais sans doute des variables tirés de ma base de donnée et de modèles, mais pour l’exemple j’ai voulu resté simple. Ensuite je fait un $this->set($d); qui fait appel à la fonction set de ma classe mère, qui stock tout ça dans la variable $vars, ensuite j’appèle $this->render(‘index’); qui fait appèle à la méthode render de ma classe mère, celle ci extrait les variables du tableau pour pouvoir les utiliser ensuite dans ma vue (on le verra ensuite) puis va cherccher le fichier avec le nom que j’ai passé en paramètre, c’est à dire index.php dans le répertoire views.

Voyons ce fichier :

views

Je ne peux pas faire beaucoup plus simple… Voila le bout du chemin, mon controlleur va donc charger ce fichier, et comme on a fait un extract($this->vars); avant, je peux me servir de mes variables ainsi : $tuto[‘nom’].

Et voila, la magie du MVC ! simple et efficace.

Bien sûr cela reste un simple tutoriel, ce code n’est pas destiné à être en production mais c’est un bon départ pour comprendre comment les framework MVC fonctionne.

Mon compte Google accédé depuis la chine.

Ce matin j’ouvre ma boite mail, comme tout les jours, pour dépiler mes mails. Une alerte sur font rouge et gras s’affiche alors au dessus de mes mails, m’avertissant que mon compte avait été accédé depuis la Chine !

image

Ce genre d’incident n’est pas isolé, plusieurs billet sur le web en parle, Google est connu pour résister tant bien que mal aux pressions politique chinoise cela pourrais être une raison pour que la Chine cible les services de Google et plus particulièrement Gmail.

Je m’interroge aujourd’hui sur la sécurité de ma boite mail..

Et vous..

  • Aujourd’hui, est il toujours sûr de garder ça messagerie sous Gmail ?
  • Avez-vous déjà été victime de piratage ?
  • Google prend il des mesures efficaces contre ces intrusions ?

Un menu toujours à portée de clic !

Bonjour !

Voici une petite astuce pour ceux qui aimeraient avoir le menu du haut d’un site web toujours à portée de clic (pour l’exemple ça sera le forum de Developpez mais ça fonctionne pour tous les sites web bien sûr).

On s’appuie ici sur Greasemonkey, un plugin devenu relativement célèbre sur le navigateur Firefox, ce plugin permet de changer des éléments à la voleé sur un site web. Pratique quand on souhaite customiser quelques éléments.

Je vous propose tout simplement d’ajouter quelques styles css supplémentaires sur la page, afin de fixer le menu. Dans un premier temps on peut déjà utiliser firebug pour « tester » les modifications du css sur la page en live, c’est très pratique, et aussi pour repérer l’id des éléments HTML que l’on doit modifier. Dans notre cas l’id de la div à modifier est « quicknav ».

Voici le code css qui va nous aider :

#quicknav {  left: 50%; margin-left: -450px; position: fixed; z-index: 2; }

On s’aperçoit sur firebug que l’attribut « position: fixed; » nous fixe bien le menu mais il se colle à gauche et se positionne sous les autres éléments. Pour le re-centrer on utilise une parade avec un left à 50% puis un margin-left à peu près à la moitié de la taille du menu. Et voila ! Le menu n’étant pas conçu pour se balader sur la page, ce n’est pas de toute beauté mais là c’est le côté pratique qu’on recherche ;)

Pour utiliser le script, si vous êtes sur Firefox, vous devez tout d’abord installer le plugin Greasemonkey, ensuite vous pouvez installer n’importe quel script qui est conforme, vous en trouverez tout plein sur le site userscripts.org véritable mine d’or pour les custommer en herbe, sinon sur Chrome c’est utilisable directement ! Il suffit de charger un script, ou de cliquer sur « install » sur le site userscripts.org.

Vous trouverez le script que l’on viens de faire sur cette page.

++

pomodoro draw

pomodoro

La méthode « pomodoro » est utilisé pour gérer sont temps de travail, il s’agit d’une méthode simple qui consiste à découper ces tâche en « tomate », une tomate étant 25 minutes de temps, au bout de 25 minutes vous devez arrêtez pour prendre une petite pause, et reprendre une autre tomate de 25 minutes, ceci 4 fois de suite. Au bout de 4 tomates vous devez prendre un longue pause d’environs 30 minutes. pour en savoir plus vous pouvez visiter le site officiel, ou alors lire le retour d’expérience de mathieu.agopian sur son blog.

ajax draw

ajax dessin

Un dessin vaut toujours mieux qu’un long discourt ^^
le mécanisme ajax est très rependue maintenant, cela consiste à charger des données dans une page sans recharger la page elle même, ça donne une dimension « client lourd » à la page. ici le mécanisme est illustré avec la bibliothèque Jquery très connue.
j’ai volontairement vulgarisé le code pour en faire un schéma rapidement compréhensif.

Résultat du défi n°2

Bonjour,

Le deuxième défi se termine, avec des participants motivés qui ont bien sûr relevé le défi.

Le défi était donc de trouver une solution au problème du voyageur de commerce, avec une petite variante, qui était que le calcul de la distance entre 2 points se faisait dans l’espace en 3D, et non en 2D, avec donc, 30 points.

Les Golgoths on été très étonnés de la réponse rapide, et efficace de pseudocode.

Il a su utiliser avec génie, un algorithme génétique, ce n’était pas évident pourtant.
Je vous laisse découvrir sa solution sur le forum

Ensuite, Sylvain Togni a livré une version avec un algorithme de type branch & bound, qui a donc confirmé le résultat du meilleur chemin déjà trouvé par pseudocode (89188), tout de même un très bel effort de la part de Sylvain Togni

Les Golgoths tiennent à féliciter ces deux membres, pour leur ingéniosité. Bravo !!

Lire la suite

2ème défi : Le courrier est trop long !

Bonsoir,

Je sens que vous manquez de challenges, mais les Golgoths vous préparent de grands défis, en voici un qui devrait laisser tout votre talent s’exprimer correctement..

Le voyage dans l’espace.

Pour ce défi, j’ai contacté le concepteur des voyages interstellaires (oui, les Golgoths voyagent depuis longtemps de planète en planète…) pour qu’il m’explique un peu plus en détails les modalités.. JoeChip va donc vous expliquer tout ça en détail :

– Aujourd’hui, notre réseau de distribution de courrier ne s’effectue plus dans les délais, et les Golgoths sont de plus en plus mécontents de ne pas avoir de nouvelles de leur voisinage interstellaire. Nous avons actuellement 30 planètes où circule le courrier, et il nous faudrait déterminer quel est le plus court chemin entre ces 30 planètes, en ne passant qu’une fois pour chaque planète.

Voici donc les emplacements de nos planètes :

nom;X,Y,Z

P-1:914,9904,1583;
P-2:2371,7086,9327;
P-3:6266,5886,6028;
P-4:4451,7026,7292;
P-5:1573,6693,8829;
P-6:8875,18,5462;
P-7:1582,6028,8613;
P-8:9426,2272,9831;
P-9:6310,2007,903;
P-10:6896,5130,8681;
P-11:4086,6387,991;
P-12:2897,2825,9816;
P-13:851,5771,2018;
P-14:3020,1260,9760;
P-15:570,5348,766;
P-16:3168,1099,5495;
P-17:4893,9563,7652;
P-18:7634,4480,3935;
P-19:5114,1487,7632;
P-20:1752,6060,5080;
P-21:8425,9370,757;
P-22:7346,365,640;
P-23:6302,8676,3868;
P-24:9013,8025,4246;
P-25:3444,8561,4769;
P-26:8853,8857,6923;
P-27:9065,3143,909;
P-28:5407,2004,5566;
P-29:1030,6451,1908;
P-30:7055,7782,1339;

Aide les Golgoths postiers, à trouver le chemin le plus court !

Venez discuter de vos solutions avec les autres développeurs ici

Résultat du défi : Les 100.000 boites

Bonsoir,

Les Golgoths ont décidé de clore le premier défi, qui n’était en réalité qu’une introduction.. aux autres défis qu’ils vous réservent, enfin, vous le verrez dans les prochaines semaines.

Déjà, un grand bravo, à tous les participants ! Les golgoths sont fiers d’avoir eu autant de volontaires dès la première épreuve.

Le défi consistait donc à calculer le volume des boites, puis à trier la liste, de sorte que la plus grosse boite se trouve directement au bout de la liste.

Voici, une des participation, parmi les autres que vous pouvez retrouver sur le forum

La participation de pseudocode en java :

   1: import java.io.FileReader;
   2: import java.io.FileWriter;
   3: import java.util.ArrayList;
   4: import java.util.Collections;
   5: import java.util.Comparator;
   6:  
   7: public class Test {
   8:  
   9:     static class Box {
  10:         int x,y,z,volume;
  11:         public Box(int x, int y, int z) {
  12:             this.x=x; this.y=y; this.z=z;
  13:             this.volume=x*y*z;
  14:         }
  15:         public String toString() {
  16:             return this.x+,+this.y+,+this.z;
  17:         }
  18:     }
  19:     
  20:     public static void main(String[] args) throws Exception {
  21:         ArrayListBox> list = new ArrayListBox>();
  22:         
  23:         // read file and insert into list
  24:         FileReader reader = new FileReader(box.txt);
  25:         while(reader.ready()) {
  26:             int x=0,y=0,z=0,d;
  27:             while((d=reader.read())!=',') x=10*x+(d-'0');
  28:             while((d=reader.read())!=',') y=10*y+(d-'0');
  29:             while((d=reader.read())!=';') z=10*z+(d-'0');
  30:             list.add(new Box(x, y, z));
  31:         }
  32:         reader.close();
  33:  
  34:         // sort the list
  35:         Collections.sort(list, new ComparatorBox>() {
  36:             public int compare(Box b1, Box b2) { return b1.volume-b2.volume; }
  37:         });
  38:  
  39:         // write the sorted list to file
  40:         FileWriter writer = new FileWriter(sorted.txt);
  41:         for(Box box:list)
  42:             writer.append(box.toString()).append(';');
  43:         writer.close();
  44:     }
  45: }

Encore un grand merci, à tous les participants, qui je l’espère seront là pour le prochain défi !

Défi des Golgoth : Pas de triche

Bonjour,

Les Golgoths ne tolèrent pas les tricheurs, et ont donc mis au point une technique qui ne permet à aucun élève d’une classe de tricher lors d’un examen important.

information

Comme le montre l’image ci dessus, l’élève peux essayer de tricher en regardant sur la copie en haut à droite, en haut à gauche, à droite et à gauche. Les Golgoths ont donc décidé qu’il serait interdit de placer les élèves de sorte qu’ils puissent effectivement tricher. Il y a aussi dans les salles de classe des places qui ne sont plus praticables, où les chaises ou les tables sont cassées, ou absentes.

Votre tâche est donc de déterminer, suivant la classe que nous vous donnerons, le maximum d’élèves que la classe peut contenir, sans qu’aucun des élèves puisse tricher.

La première ligne du fichier vous donne le nombre de salles de classe.
Chaque salle de classe est décrite comme ceci : deux entiers, la longueur et la largeur de la salle.
Les lignes suivantes décrivent la classe en elle même. Chaque caractère est soit un ‘.’ ce qui signifie que la place peut être occupée, soit un ‘x’ qui signifie que la place ne peut pas être occupée (la table est cassée…)

Pour chaque classe, vous devez indiquer le maximum d’élèves que la classe peut contenir sans qu’aucun des élèves puisse tricher.

voici le fichier des classes

Ce problème est inspiré d’une épreuve de Google code Jam (GCJ 2008 Round 3).