/mvc4

Framework pédagogique MVC4

Primary LanguagePHP

Framework Pédagogique MVC4

Installation

Prérequis

  • PHP >= 7.1.*
  • Composer
  • MySQL avec PDO

Configurations

Par sa simplicité, MVC4 requière peu de configuration pour fonctionner.

Le fichier de configuration

MVC4 est livré avec un fichier nommé config/config-dist.php. Ce fichier est destiné à être versionné, et ne doit pas contenir d'informations personnelles ou sensibles. Le fichier lu par défaut par le framework est config/config.php, qui lui, ne doit pas être versionné, il vous est personnel.

Pour démarrer copier-coller le contenu du fichier config/config-dist.php dans

/* config/config.php */

return array(
    'db_name'   => 'dbname',
    'db_user'   => 'root',
    'db_pass'   => '',
    'db_host'   => 'localhost',

    'directory' => '/chemin/to/view/'
);

Controlleur Frontal

=> /public/index.php Pour afficher le site aller via localhost dans le dossier public de votre application

Routes

=> /config/routes.php

À quoi servent les routes ?

Les routes permettent d'associer simplement des URL virtuelles à des pages spécifiques de votre site. Plus précisémment, elles vous permettent d'exécuter une méthode de contrôleur que vous avez choisie

Comment créer une nouvelle route ?

Toutes les routes doivent être définie dans le fichier /config/routes.php

'index.php?page=nameofpage&id=.'$id 

Controller

=> /app/Controller

À quoi servent les contrôleurs ?

Les contrôleurs sont au coeur de vos applications. Ce sont eux qui traitent les requêtes et les formulaires, font appel au "modèle" pour manipuler les données, exécutent la logique applicative, et finalement, retournent des réponses (habituellement une vue, des données brutes ou une redirection) au client.

Comment créer un contrôleur ?

Vous pouvez créer autant de contrôleurs que vous le souhaitez. Pour vous donner une idée, il est fréquent d'avoir autant de contrôleurs que vous avez de table dans votre base de données (bien que ce ne soit nullement une règle à appliquer strictement). Ainsi, pour un blog, il y aurait probablement, a minima, un PostController, un CommentController et un UserController.

Toutes vos classes devraient être sous l'espace de nom App\Controller et hériter (directement ou non) de la classe App\Weblitzer\Controller, afin de bénéficier des méthodes fournies.

La classe App\Weblitzer\Controller

Il est essentiel de parcourir vous-même la classe App\Weblitzer\Controller, afin d'avoir un portrait juste de tout ce qu'elle vous offre.

En quelques mots, sachez qu'elle vous permet de gérer les redirections et les urls, l'envoi de réponses de vue, de pages d'erreurs et de JSON.

Créer une action

Pour chacune des "pages" de vos applications, une méthode de contrôleur devrait être définie. C'est notamment pour cette raison que vous ressentirez le besoin de créer plusieurs contrôleurs, afin de "classer" vos méthodes, qui deviendront rapidement nombreuses.

Ces méthodes doivent être de visibilité public, et devrait normalement se terminer par l'une des actions suivantes :


/* app/Controller/DefaultController.php */
public function index()
{
	//autre logique ici, puis...
	/** 
	 * Méthodes habituellement utilisées en fin de traitement du contrôleur 
	 */
//affiche un template
$this->render('app.default.contact');

//affiche un template, tout en rendant des données disponibles dans celui-ci
//template disponible dans le dossier view/app/default/contact.php
$this->render('app.default.contact',['username' => 'michel']);

//redirige vers une page du site
$this->redirect('index.php?page=contact');

//redirige vers un site externe
$this->redirect('https://weblitzer.com');

//retourne une réponse JSON
//... $data = [];
$this->showJson($data);

//retourne une erreur 404
$this->Abort404();

}

Model

=> /app/Model

À quoi servent les modèles ?

Les modèles (ou Model) sont les classes responsables d'exécuter les requêtes à votre base de données.

Concrètement, chaque fois que vous souhaitez faire une requête à la base de données, vous devriez venir y créer une fonction qui s'en chargera (sauf si elle existe déjà dans les modèles de base du framework).

Comment créer un nouveau modèle ?

Dans votre application, vous pourriez avoir un modèle par table MySQL (sans obligation). Chacune de ces classes devraient hériter de App\Weblitzer\Model\, le modèle de base du framework, qui vous fera profiter de quelques méthodes utiles pour les requêtes simples à la base de données.

Par exemple, pour créer un modèle relié à une table fictive de commentaires nommées comment :

<?php /* app/Model/CommentModel.php */
namespace App\Model;
class CommentModel extends \App\Weblitzer\Model 
{
    protected static $table = 'comments';
    protected $comment;
    protected $created_at;
    protected $status;
	//Récupère les commentaires associés à un article
	public function findPostComments($postId)
	{
		//...
	}
}

Les propriétés et méthodes héritées du Model

Voici les propriétés et les méthodes les plus utiles, héritées du modèle de base. Vous devrez créer vos propres méthodes pour réaliser toutes les requêtes SQL plus complexes !


/* App/Weblitzer/Model.php */
// Récupère une ligne de la table en fonction d'un identifiant
public function all()
public function findById($id)
public function findByColumn($column,$value)
public function delete($id)

View

=> /view

À quoi servent les vues ?

Les vues ou templates permettent de séparer le code de présentation du reste de la logique (contrôleur) ou des données (modèles). On y retrouve donc essentiellement des balises HTML et des echo de variables PHP.

Comment créer un nouveau fichier de vue ?

Où placer ses fichiers de vues ?

Donnée importante à connaître : Le framework vous impose de placer vos fichiers de vues sous le dossier view/app/. Outre cette règle, vous êtes libre de faire comme bon vous semble.

Ceci étant, la plupart des pages de votre application devrait avoir un fichier de vue propre. Ainsi, il devrait y avoir à peu près autant de routes que de méthodes de contrôleur que de fichiers de vue dans votre application. Il est donc important de les classer un minimum, afin de s'y retrouver. Pour cette raison, je vous suggère de placer vos fichiers de vue dans des répertoires portant le même nom que son contrôleur (sans le suffixe Controller, et en minuscule). Ainsi, si vous avez un PostController et un UserController dans votre application, vous devriez avoir un dossier de vues nommé view/app/post/ et un autre nommé view/app/user/. Ce n'est toutefois qu'une convention suggérée.

Les fichiers de vue doivent avoir l'extension .php.

Que contient un fichier de vue ?

Au plus simple, un fichier de vue ne doit contenir qu'une page HTML complète. Lorsque votre contrôleur déclenchera l'affichage de votre fichier de vue, il enverra le contenu de celui-ci en réponse au client.

Les CSS, les JS et les images

Tous les fichiers publics de votre application (public dans le sens que vous considérez qu'un internaute doit pouvoir l'afficher directement dans son navigateur) doivent se trouver dans le dossier public/. Autrement, le navigateur n'y aura tout simplement pas accès. Ainsi, vos fichiers .css, .js et vos images (souvent nommés assets) devront nécessairement y être placés.

BRIEF - EXO

Création d'une application pour gèrer les emprunts de produits par des abonnés d'une association.

3 entités :

- **Abonnes** (id, nom, prenom, email, age (null), created_at)

- **Products** (id, titre, reference, description(textarea) )

- **Borrows** (id, id_abonne, id_product, date_start, date_end(null))

Listing, Show, New, Edit, Delete. (CRUD)

Faire un crud complet pour les abonnés et aussi les Produits.

Les emprunts

Faire une seule page qui va afficher tous les emprunts ainsi que le formulaire d'ajout qui contiendra deux select, un pour choisir parmi les abonnées et un autre pour sélectionnez le produit On pourra enlever un emprunt de la liste en donnant une date à date_end

Page Statistiques

Afficher le nombre d'abonnés.

Afficher le nombre de produits.

Afficher le nombre d’emprunts total.

Afficher le nombre d’emprunts en cours.(date_end IS NULL)


Bonus

  • Gestion des catégories de produits.
  • Pagination numérotée des listings des abonnés et des produits.
  • Gestion d'un formulaire au choix à l'aide d'Ajax.