Salut,3WAcademy - Semaine 10 - logo

Pour démarrer toutes mes excuses pour le retard des publications, mais la fin de la formation approchant, j’ai eu pas mal de travail à fournir et du coup le blog est passé en second plan pendant la fin de la formation. J’espère tout de même que tu as passé de bonnes fêtes de Noël. Cet article a été rédigé lors de la semaine 10 donc cela respecte la suite logique de mes précédentes publications, je n’ai juste pas eu le temps pour le mettre en forme et le publier.

C’est donc parti pour cette semaine 10 qui aura été pour moi la semaine de la loose, la fatigue commençant sérieusement à se faire sentir…

Ayant eu un peu de mal au démarrage sur les objets en Javascript et comme j’ai eu le « privilège » d’être malade et de rater le cours, j’ai ensuite eu aussi un peu de mal avec les objets en PHP.

Je ne rentrerai pas dans le détail de cette façon un peu différente de programmer, parce qu’il me manque encore des choses…

Cette semaine nous avons démarré le projet, qui consiste à réaliser un site e-commerce pour un restaurant.  Nous allons devoir utiliser quasi-exclusivement la programmation orientée objet en PHP. Je suis un peu sceptique parce que pas à l’aise, mais ça fera une bonne raison de s’y frotter!

D’autre part, la 3WAcademy a construit un petit framework PHP, pour nous aider à réaliser ce projet. La compréhension de ce framework m’a valu d’ajouter quelques cheveux blanc à mon palmarès… Ce n’est pas un framework que nous réutiliserons mais c’est à priori un bon moyen pour s’initier au modèle MVC. Encore une fois, je n’ai jamais utilisé cela, mais dans la mesure où je veux me mettre à Symfony ensuite, il faut que je comprenne le fonctionnement du modèle MVC.

DEVELOPPEMENT

Les objets

Je ne vais pas revenir sur les objets en Javascript dans cet article, parce qu’il me manque beaucoup de pratique pour être à l’aise avec ça, idem pour l’utilisation de CANVAS.

Concernant la pratique des objets en PHP, nous avons eu des exemples assez sommaire, et nous nous sommes lancé directement dans l’exercices qui consistait à afficher des formes SVG créées en PHP. Donc là imagine toi bien, que dessiner avec du PHP, et en plus  avec des objets, j’ai frôlé le malaise. A force de test, et de bidouillages intensifs, j’ai fini par afficher quelque choses de bien: un très beau carré rouge! Sauf que je n’avais pas vraiment la sensation de comprendre le code que je produisais. J’appliquais assez bêtement les méthodes qu’on nous a apprises sans conviction…Bref ça a fini par fonctionner.

3WAcademy - Semaine 10 - dessiner en php

Content de moi , j’ai vite déchanté lorsque pour l’exercice suivant il nous a fallu recréer une sorte de DOM en PHP dans lequel on aurait à créer plusieurs autres formes dans une seule balise SVG.

Pour la première fois depuis 10 semaines, je n’ai pas réussi à faire l’exercice. Rien ne fonctionnait, je ne comprenais pas ce que je faisais, même si je me représentais assez bien le résultat final. Je pense que j’aurais réussi à le faire en procédural mais en orienté objet, je n’y suis pas arrivé. Il y a un truc qui bloque pour le moment donc il va falloir travailler pour comprendre le principe et se faire à cette nouvelle façon de programmer. Donc à ce stade, je ne sais pas si c’est la fatigue ou la frustration , mais gros passage à vide cette semaine… Il parait que c’est normal, et que ça arrive à tout le monde… Cela dit je remarque que nous avons été un certain nombre pour ne pas dire tous en fait, à être vraiment à la ramasse avec la POO…

D’un autre côté, on a passé deux jours pour apprendre les objets en JS et une grosse journée et demie pour les objets en PHP…

Je ne peux pas m’empêcher de penser qu’on passe peu de temps sur ces notions à cause des jours perdu en début de formation à faire des révisions basiques en Javascript pour ceux qui n’avait jamais codé… Le problème c’est qu’aujourd’hui, ceux qui ont réclamé ces révisions ne sont plus là aujourd’hui et ont abandonné… donc j’appelle ça de la perte de temps… C’est pas très grave mais c’est un peu dommage…

Donc encore une fois, avant de faire cette formation, arrive préparé pour suivre le mieux possible et éviter de perdre du temps et d’en faire perdre.

Je ferai des articles pour la programmation orientée objet que ce soit en JS ou PHP quand je retravaillerais tout cela. J’espère que je vais finir par être plus à l’aise grâce au projet…

Le projet

Donc cette fois c’est parti, la fin approche et nous voilà face à notre dernier défi : faire un site e-commerce en PHP pour un restaurant.

Pour nous immergé un peu dans ce projet, notre formateur nous a demandé de réfléchir en groupe à ce projet, aux différents cas d’utilisations, aux différentes fonctions que nous allons vouloir implémenter. Et oui, c’est nous qui décidons des fonctionnalités du site, il n’y a pas vraiment de contraintes. Nous devons juste ajouter la possibilité de faire une réservation de table et permettre des commandes en lignes.

Je suis dans un groupe de 3, ou les niveaux sont assez différents.J’ai demandé à m’occuper de la partie administration en php, et de la gestion des sessions de connexions, chose que je n’avais pas eu le temps de faire pour le blog.

Un de mes collègues a voulu se lancer dans la réalisation d’un calendrier en Javascript ressemblant à celui qu’on peut voir sur le site de la fourchette. En ce qui me concerne, je serais plutôt parti sur un formulaire, plus simple,  mais je lui ai dit qu’il pouvait faire ce qu’il voulait, mais je me doute déjà que ça va être compliqué…. on verra, j’espère qu’il y arrivera!

Nos objectifs

Nous avons passé quasiment une journée à réfléchir à quoi faire et comment. J’ai pris un peu de temps pour faire un mockup pour savoir dans quelle direction on partait d’un point de vue de la structure HTML.  Ensuite j’ai résumé de nos réflexions dans un fichier en markdown pour qu’on ai tous la même trame. 

# Projet Restaurant

**Point du 7/12/2017**

## Partie Admin Salarié

  -> connection / déconnexion
  -> entrer un menu
  -> supprimer un menu
  -> modifier un menu
  -> suivre les commandes en cours
  -> (option : modifier les status des commandes)

## Partie Admin Client

  -> consulter ses commandes en cours
  -> connection / déconnexion
  -> peut supprimer son compte
  -> (option : suivre le status des commandes)
  -> (option : avoir accès à son historique de commandes)

## Partie Interface Client

  * Navigation fixe
    -> Panier
    -> Bouton créer son compte
    -> Bouton se connecter

  * Main
    -> Slider
    -> Calendrier

  * Footer
    -> Lien de connection administrateur
    -> Informations diverses


## Formulaire Créer son compte Client => fait
  -> input **Prénom**
  -> input **Nom**
  -> input **Mail**
  -> input **Adresse**
  -> input **CP**
  -> input **Ville**
  -> input **Mot de passe**
  -> Bouton *Créer son compte* (**type submit**)

  (A voir comment on le fait-> Possibilité de modifier/supprimer son compte =>  voir sur quelle page on fait ça => ajouter bouton permettant de faire ça)

## Formulaire salarié
  -> input **Nom du menu**
  -> input **Entrée**
  -> input **Plat**
  -> input **Dessert**
  -> Input **tarif**
  -> Bouton *Créer le menu* (**type submit**)


## Base de données

**Table**
    1. Client
        *id*
        *Nom*
        *Prénom*
        *Mail*
        *Adresse*
        *CP*
        *Ville*
        *MdP*
        *Commande*
        *Réservation*

    2. Salarié
        *id*
        *Nom*
        *MdP*

    3. Commandes
        *id*
        *parent* (peut etre NULL => info pour création BDD)
        *menu*
        *horaire*

    4. menu
        *id* (numéro menu)
        *Nom Menu*
        *Entrée*
        *Plat*
        *Dessert*
        *Tarif*

    5. Photo (option)
        *id*
        *url*
        *parent*

    6. Réservation
        *id*
        *nombre de personne*
        *horaire*

## Cas d'utilisation

### Utilisateur


        * passer une commande => 1
        * faire une réservation => 1
        * Modifier ses informations personnelles => 1
        * Supprimer son compte personnel => 1
        * Avoir accès à son historique de commande => 2
        * Donner un avis ou écrier un commentaire => 2
        * Se connecter ou se déconnecter


### Salarié


		* Créer un menu => 1
		* Modifier un menu => 1
		* Supprimer un menu => 1
		* Voir les commandes en cours => 1
		* Voir la liste des menus proposés => 1
		* Se connecter ou se déconnecter => 1

### Commandes


		* Afficher la liste des commandes du client dans son espace utilisateur
		* Affiche la liste de toutes les commandes de tous les clients => coté salarié


### Réservation


                * Afficher la liste des réservations coté espace client
                * Affiche la liste de toutes réservations  + aficher nombre de lace disponible => coté salarié

### Pages ou vue à faire


            1. Home
                * Navigation
                * Main -> Slider + Calendrier
                * Footer

            2. Menu
                * Main -> affiche des menus sous forme de bloc
                    -> bouton commander ce menu => ajoute produit dans le panier mais il faut qu'on en rediscute, on en a pas parlé jusque là)
                    -> voir comment on gère le panier, validation de commande etc...

            3. Venir
                * Coordonées du restau
                * Map Google

            4. Page contact
                * Formulaire à voir si on a le temps...

Le Framework de la 3WA et le MVC

Une fois les idées un peu plus claire sur ce projet, nous avons eu une présentation d’une journée, façon cours magistrale au tableau sur le fonctionnement du petit framework PHP développé par la 3WA. Cet outil est sensé nous permettre de pouvoir travailler plus vite et plus organisé.

Bon je ne te cache pas que je n’ai pas eu les idées claires toute cette semaine , et les explications ne m’ont pas convaincu de l’utilisation de ce framework, mais comme on dit: « On va laisser sa chance au produit! » Ce qui m’a un peu dérangé c’est qu’on nous a expliqué beaucoup de chose mais qu’on a pas trop eu l’occasion de faire des tests pour comprendre comment ça marchait J’étais donc assez partagé entre continuer à écouter les explications ou me lancer seul dans des tests dans mon coin… Sauf que j’ai vite compris que faire des tests sur un framework pour lequel il n’y a pas de documentation, ça va être compliqué! Je me suis donc accroché pour essayer de comprendre comment ce truc fonctionne… J’ai aussi eu un conseil que j’ai trouvé assez stratosphérique d’un de mes collègues: «  Tu n’a pas besoin de comprendre comment tout marche, tu as juste besoin de l’utiliser! ». Euh…c’est quoi cette phrase? Surtout quand ça vient de quelqu’un qui ne comprends rien non plus… Je lui ai donc demandé comment lui faisait pour utiliser correctement quelque chose dont il ne comprend pas le fonctionnement…?

Le principe de fonctionnement de ce framework est basé sur le modèle MVC qui signifie:

  • Modèle
  • Vue 
  • Controller

Voici une illustration du modèle MVC telle qu’on nous l’a présenté:

3WAcademy - Semaine 10 - model MVC

La page que l’utilisateur aura sous les yeux aura un rôle de routeur. (1) Chaque moyen d’interaction bouton, formulaire et lien notamment permettra de demander des requêtes (ou des pages) différentes (2). A chacune de ses requêtes correspondra un « controler » qui recueillera les informations demandées:  paramètres dans l’url via une méthode GET, ou des champs de formulaires via une méthode POST. Un controler contient un objet qui aura la responsabilité de traiter les informations demandées: redirection vers une autre page (6) ou échange avec le Model pour déclencher une requête SQL(3). Dans le cadre du framework de la 3WA, les modèles sont des objets qui exécute les requêtes SQL et renvoient ensuite la réponse au controler(4), qui se chargera de transmettre ces données à une vue (5). Ce dernier maillon de chaine mettra en forme les informations que lui aura transmis le contrôler pour les afficher à l’écran, et construira alors une nouvelle page(6). Cette nouvelle page aura elle aussi un rôle de routeur, permettant un certain nombre d’interactions.

Dans le principe, j’ai compris comment le modèle MVC fonctionnait, en revanche, je n’ai pas compris comment le framework faisait cela… Ce qui est perturbant c’est qu’il y a tout une partie du code qu’on a pas à écrire mais qu’il faut bien comprendre sans quoi je vais écrire du code qui ne fonctionnera pas et ne servira donc à rien. Je n’ai jusqu’alors jamais travaillé avec un framework, donc je vais devoir apprendre à me servir de cet outil. 

Il va falloir un peu de repos ce week end et se remettre les neurones en phase afin d’aborder le projet correctement. En partant de l’école ce soir, je ne vois pas comment je vais réussir à faire quelque chose d’abouti et fonctionnel sans avoir bien compris les objets en PHP et le framework. Cerise sur la gâteau, le framework est codé avec des objets et je vais devoir utiliser uniquement des objets pour le faire fonctionner… La semaine prochaine s’annonce compliquée… On se rassure comme on peut le vendredi, les autres sont dans le même état…

Ce sera tout pour cette semaine de la loose, où la fatigue commence à être un problème…Mais je sais que pour réussir ce projet il va falloir que je le laisse un peu de côté pour me concentrer sur des tests simple sur le framework afin de bien comprendre comment il fonctionne et comment le MVC se mets en oeuvre…

Je te souhaite un bon week end, il parait que Noël approche donc il va falloir que je m’occupe de 2-3 choses…

A bientôt,

Guillaume