MyMVC, présentation rapide

Classé dans : MyMVC | 0

MyMVC c’est un petit framework PHP mise au point pour mes besoins personnels depuis quelque années. Ce framework n’a aucune prétention et le but est simplement de partager avec toutes personnes qui souhaitent le tester, l’utiliser. Cela permet d’avoir un retour d’utilisateurs, toujours très instructif.  L’idée du départ c’est de fournir une base pour un moteur MVC (Model, View, Controller) facile à utiliser et qui laisse une grande liberté aux développeurs

MyMVC intègre une gestion des droits d’accès utilisateur (ACL), permettant de filtrer l’accès aux contrôleurs et actions de l’application..

MyMVC n’inclut pas d’interface graphique, ce n’est pas un CMS.

MyMVC peut être utilisé pour construire tout type d’application WEB (application métier, site internet, webapp pour mobile…) une grande liberté est laissée aux développeurs pour faire les choses comme ils le souhaitent.

MyMVC intègre un moteur de template (ça été le point de départ). Ce moteur de template permet de séparer complètement la partie design (interface utilisateur) de la partie code (PHP/JS). On peut ainsi utiliser des templates pour faire tous types de fichiers HTML, XML, CSS, JSON. Aucun code PHP n’est inclus dans les templates, il y a uniquement des balises (tags) pour indiquer l’emplacement des données dynamiques et c’est tout. Ces balises sont au nombre de 4 :

  • Variable simple {VAR}
  • Bloc de variables à répéter (pour construire des tableaux ou liste par exemple) {BLOCK_START}…..{BLOCK_END}
  • Une balise pour inclure un autre template (pour les parties commune par exemple, menu, footer, header) {{NomDuTemplate}}
  • Un tag pour inclure une view (view = un template pré calculé) {/view/}

Il n’y a rien d’autre à apprendre, aucun langage de templates, tous les traitements doivent être effectués en PHP (ou JS). Si vous avez déjà utilisé un autre moteur de template (Smarty par exemple) vous savez de quoi je parle…

MyMVC intègre également une classe d’abstraction (Modèle) pour l’accès aux Bases de données (pour l’instant seul MySQL/MariaDB sont gérées). Cette classe limite l’écriture de code SQL. L’écriture des requêtes SQL reste possible mais ne sera nécessaire que pour certaines requêtes complexes.

Le modèle permet d’appliquer des transformations aux données après lecture et avant enregistrement dans la base (conversion de date au format français par exemple).

Chaque développeur sera en mesure d’utiliser les méthodes qu’il souhaite pour faire ses conversions. Il est également possible de définir des fonctions de validation pour les valeurs.

Pour éviter les répétitions de code, un système de datasource (source de données) permet de créer du contenu qui pourra être disponible dans plusieurs controllers, actions, views. Une utilisation typique concerne la création d’un menu qui doit être intégré dans toutes les pages. Grâce aux datasources la création du menu n’est écrite qu’a un seul endroit et elle est ensuite utilisable dans toutes les pages (vues) de l’application.

Pour finir cette introduction, j’ajouterais que MyMVC dispose un modèle CRUD (Create/Read/Update/Delete) qui facilite la gestion des formulaires et des actions simples : Ajouter/Lire/Modifier/Supprimer. Avec simplement quelques lignes de Javascript il est possible de faire fonctionner un formulaire très rapidement.

Utilité d’un framework PHP

Un framework permet de simplifier le développement d’application web (application, site Internet,cms…) en créant une couche d’abstraction avec une méthode structurée pour afficher et traiter les données. Cette abstraction est composée de classes (Controlers et Modèles) et de méthodes (action) effectuant des opérations simples. Le but étant d’apporter une certaine harmonisation du code et éviter les répétitions.

Zend propose un framework très (trop) complet. MyMVC ne peut se comparer à Zend dans le sens où il se limite à la gestion MVC (Model View Controller) alors que Zend inclut de nombreuses classes/api annexes permettant de faire beaucoup de choses. La contrepartie se sont les performances qui comparées à un ‘petit’ framework sont moins bonnes.

Un framework n’est pas un CMS (Content Management System, gestionnaire de contenu). Un framework permet de développer des CMS, des sites Web, des applications web (extranet/intranet), des applications pour mobiles et/ou tablettes. Le projet MyMVC est née pendant le développement de mon application Shyrka (gestion de comptes personnels) pour mes besoins personnels.

Principe de fonctionnement de MyMVC

MyMVC utilise des urls spécifique pour accéder aux différents controlers et actions. Chaque url est composée ainsi :

http://UrlDuSite/NomDuController/NomDeLaction

Un exemple (tiré de l’application Shyrka) : http://…./comptes/liste

MyMVC analyse cette url et instancie la classe ComptesController et exécute la méthode listeAction de cette classe. Pour l’affichage MyMVC va rechercher un template liste.html (dans le dossier templates/comptes/). Si besoin, il est possible de spécifier un autre template à utiliser.

Pour rendre les urls plus ‘sympas’ MyMVC propose de créer des alias (fichier config/pages.ini). Chaque alias correspond à un couple controler/action. Par exemple il est possible de créer un alias : comptes.html qui ‘pointe’ vers comptes/liste. L’url devient alors : http://…../comptes.html

Bien sûr le processus est ici très réduit et de nombreux traitements intermédiaires sont effectués. Vous en saurez plus dans la suite de la documentation.

Exemple simple pour démontrer la simplicité de mise en œuvre. Soit un site qui utilise MyMVC et sur lequel on souhaite ajouter une page contact.

Supposons pour l’exemple que MyMVC est installé et configuré.

Créer une classe controler Contact : controllers/ContactControler.php

Class ContactControler extends MyMVC_Controler {
  public function __construct()
  {
    parent::__construct('Contact') ; // init du controler avec son nom
  }
  public function indexAction() { }
}

Compléter le fichier config/pages.ini

[contact.html]
controler = 'contact'
action = 'index'
params = ""

Créer un fichier /templates/contact/index.html contenant le code HTML du formulaire

Et c’est tout on peut accéder au formulaire avec  http://…./contact.html ou http://…../contact/index.

BackOffice, FrontOffice…

MyMVC peut être utilisé pour le back (coté serveur) et le front (coté navigareur). Avec l’arrivée de nouvelles techno pour le front, comme React, Next… il est clair que le coté front peut être entièrement géré sans MyMVC. Coté back par contre MyMVC reste un bon framework pour construire par exemple une API qui sera utilisée par un front REACT.

Mon autre projet Shyrka, est en train d’être (re) développé avec ce schéma :

React + JS pour 100% du front
MyMVC pour les API (fonctions qui retourne du JSON qui est affiché avec React)