Yii2 et Gii, où comment faire l'IHM de gestion d'une table SQL en 30 minutes

Auteur : Jonathan KALFA
Date : 15/12/2014 | Mis à jour : 17/12/2014
Mots clés : yii2, gii, backend, ihm, i18n, oracle, oci, xampp
Article vu 4395 fois
Aujourd’hui nous allons parler d’un des arguments les plus fort de Yii : Gii (chez Yii on est vraiment des i-lovers).

Gii est un outil web extrêmement pratique fourni en standard avec le framework et qui permet un prototypage rapide en générant des extraits de code couramment utilisés en Yii ainsi que les contrôleurs CRUD (Create - Read - Update - Delete) complets . Il permet également de générer le formalisme nécessaire à la création d’un module ou d’une extension Yii.

Il fournit enfin une interface accessible en ligne de commande pour les personnes qui préfèrent travailler en mode console. Mais là, j’avoue que ce n’est absolument pas mon cas donc je m'abstiendrais d’inventer ou de paraphraser le guide.

Ah oui en parlant de guide, au cas où j’oublierais des choses ou que vous vouliez creuser le sujet c’est ici : http://www.yiiframework.com/doc-2.0/guide-tool-gii.html

Comme il est toujours intéressant de pratiquer sur un exemple pratique, on va sortir un peu des sentiers battus et utiliser Gii sur une base Oracle afin de prouver que l'outil et le framework sont tout à fait utilisables en environnement professionnel.


1. Utilisation Oracle depuis XAMPP

Nous allons commencer par installer un client Oracle Windows et configurer notre ami XAMPP pour qu’il veuille bien utiliser les drivers oracles. Si vous avez déjà ça en place ou que vous utilisez du MySQL par exemple, passez directement à la suite !

1.1. Client Oracle Windows

Téléchargez le client/driver oracle ici : http://www.oracle.com/technetwork/topics/winsoft-085727.html
Version basic avec OCI (Version 11.2.0.4.0) pour Windows x32
Je n’ai pas testé sur du x64 mais si jamais vous voulez essayer, c’est ici : http://www.oracle.com/technetwork/topics/winx64soft-089540.html (même version)

Ensuite :
  • Unzipper le package vers le répertoire souhaité (ex : c:\xampp\intanstclient_11_2)
  • Ajouter à la variable d’environnement PATH, le répertoire en question (en fonction de votre version de Windows je vous laisse googliser si vous ne voyez pas de quoi je parle)

1.2. XAMPP configuration

Dans votre XAMPP, éditez votre php.ini et décommentez en supprimant le ‘;’ débutant les lignes (si commenté) :
  • php_oci8_11g.dll (ou le simple oci8 pour oracle 10g)
  • php_pdo_oci.dll (pdo nécessaire à Yii)
N’oubliez pas de sauver ^^, et... C’est tout. Normalement vous n'avez plus qu'à démarrer (ou redémarrer si vous avez fait ça à chaud) et ça doit fonctionner.
Pour vérifier :
  • Ca ne vous à pas explosé à la figure (symptôme du j’ai bien configuré XAMPP mais mal installé ou pas ajouté au path le driver oracle)
  • Consultez le phpinfo depuis la startpage de votre XAMPP et vérifier l’activation des oci.

2. Gii en action

2.1. Initialisation de l'application et des données


Je crée tout d’abord un squelette d’application élémentaire basé sur le template officiel basique (le plus simple pour notre exemple). Je pars du principe ici que vous avez suivi le tutoriel d’installation de Yii avec succès. Vous pouvez sinon simplement télécharger l’archive et extraire dans un répertoire accessible web de XAMPP.
Et on n’oublie pas dans tous les cas de bien configurer l’accès à sa base de données dans config/db.php
return [
 'class' => 'yii\db\Connection',
'dsn' => 'oci:dbname=//oracle-mabase.test.net:1521/mabase',
'username' => 'sympa',
'password' => 'cetuto',
'charset' => 'utf8',
];
Je crée une table ici spécifiquement pour ce tutoriel via Oracle SQLDevelopper (une application de développement BDD oracle) :
CREATE TABLE "GIITEST"(
 "GIIKEY"  VARCHAR2(20 BYTE) NOT NULL ENABLE,
 "LANGUAGE"  VARCHAR2(5 BYTE),
 "LABEL" VARCHAR2(3 BYTE) NOT NULL ENABLE,
 CONSTRAINT "PK_REF_GIITEST" PRIMARY KEY ("GIIKEY")
 )
Gii est livré en standard dans tous les templates et actif par défaut en environnement de DEV (uniquement heureusement). Vous pouvez l’activer en production même si je ne vois pas trop l'intérêt.

Tout ce qui est configuration de Yii pour le template basic se trouve dans config/web.php. Dans les autres templates il me semble que ce sont les fichiers de configuration de l’application (partie frontend, backend ou common - config)

Personnellement je n’ai touché à rien dans la configuration par défaut, mais vous pouvez par exemple filtrer sur les Ip qui auront accès à Gii :
'gii' => [
 'class' => 'yii\gii\Module',
'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'] ],
ou
$config['modules']['gii'] = [
 'class' => 'yii\gii\Module',
 'allowedIPs' => ['127.0.0.1', '::1', '192.168.0.*', '192.168.178.20'],
];
En fonction de la manière dont est défini Gii dans le fichier de configuration.

2.2. Lancement et utilisation

Une fois votre XAMPP lancé vous accéder à l’interface web de Gii en consultant :
http://localhost/path/to/index.php?r=gii
ou
http://localhost/path/to/index.php/gii (avec prettyUrl activé)

Et normalement vous arrivez sur cette superbe page :


2.2.1 Création du modèle associé à notre base

Première étape avant d’assembler notre CRUD : générer la classe représentative de votre table.
Après un petit Start sous Model Generator, si vous avez bien configuré votre accès à la base, vous n’avez plus qu’à choisir votre table. Si vous avez plusieurs tables, une recherche AJAX vous proposera des choix en fonction des premières lettres saisies :

Quelques explications supplémentaires :
  • Use Table Prefix : Utiliser les prefixes de table lors de la génération du modèle. En gros, on va prendre en compte votre variable tablePrefix de la configuration (si vous l'avez défini).
  • Generate Relations : Va gérer les relations hasOne, hasMany et autre joyeuseté lié au ActiveRecord de Yii.
  • Generate labels from DB Comments : Par défaut, les formulaires utilise le nom des colonnes si non coché (fonction attributeLabels du modèle).
  • Enable I18N : Activé l'internationalisation : les labels sont configurés pour être traduit
  • Message Category : Espace de nom lié à l'internationalisation (possibilité de séparer par espace de nom les fichiers de traduction). Il faudra que je fasse un tutoriel sur ce sujet un jour ^^.

En appuyant sur préview, on pré-génère la classe et Gii vérifie que ça n'écrase pas de fichier existant. La classe générée hérite de ActiveRecord et représente votre table sous forme d’objet tout en apportant une série de requêtes préconçues. J’essaierais de faire un tutoriel plus complet sur ce thème, mais en attendant vous trouverez de la documentation ici comme toujours : Guide Yii Active Record

On retiendra simplement que de base notre classe contient “explicitement” un ensemble de règles (rules) qui seront reportées sur les champs formulaires en terme de contrôle et revalider à l’insertion/modification, et un ensemble associatif de libellés liés aux champs de l’objet (par défaut le nom des colonnes) qui alimenteront automatiquement les formulaires.

2.2.2 C.R.U.D.

Alors avant de commencer la génération du CRUD on va modifier un peu notre modèle en rajoutant simplement dans les rules :
[['GIIKEY'], 'required'],
[['GIIKEY'], 'string', 'max' => 20],
Normalement Gii aurait dû le générer, mais comme on a indiqué que giikey est une clé et que l'on n'a pas indiqué de relation... On se retrouve avec un champ qui n'est pas à la main de l'utilisateur (ce qui m'embête pour notre exemple pratique).

Et c'est parti, pour la génération :


On se retrouve à avoir généré le V (Views) et le C (Controllers) pour la création, la mise à jour et la suppression de notre modèle. Gii a aussi permis de mettre en place un petit moteur de recherche et d'affichage sous forme de grille. Le tout est accessible comme suit : http://localhost/giitest-backend/web/index.php?r=giitest

Au cas où Gii n'a pas généré le champ de la clé dans le formulaire de création, ajoutez dans le _form.php :
field($model, 'GIIKEY')->textInput() ?>;


Petite galerie du résultat (fonctionnel) :



3. La fin est un commencement

Nous arrivons à la fin de ce petit tutoriel sans prétention avec un temps total de réalisation d'environ 30 minutes. Et encore, je me suis permis de compter l'installation du client oracle.

J'oubliais : Gii est non seulement un outil pratique, mais comme tout le framework Yii, il est extensible et on trouve une page dédiée pour générer d'autres types de code à intégrer à notre outils : http://www.yiiframework.com/extensions/?tag=gii

Personnellement je me sers surtout de Gii pour générer des morceaux de code que je récupère au niveau de la preview. Ou je génère de A à Z dans des répertoires non cible le code pour le transformer en widget ou simplement récupérer un formulaire avec son Controller. Bref, les possibilités sont extrêmement nombreuses et j'espère vous avoir donné envie de les découvrir.


Jonathan KALFA
[ @Jokabox | @Jokamax ]
Vous avez aimé ? Partager !

Commentaires

Ajouter un commentaire :


Liste des commentaires :

Pas de commentaires pour le moment :'(
Créations

Vous connaissez Scribbook ? Non ? Scribbook vous aide à organiser, évaluer, sublimer vos projets d'écriture. Cette application en ligne s'adresse à vous, professionnel ou débutant, que vous soyez : romancier, noveliste, poète, ...

Social Feeling
Publicités
Derniers Commentaires
Jokamax dans Tutoriel - Créer un Widget avec Yii2 : Et pour finir, un petit commentaire pour simplement me permettre de poster un : CA FONCTIONNE :-)...
Jokamax dans Débuter avec Yii2 sur un WAMP Portable : Bonjour Raoul, Merci pour ce gentils commentaire qui inaugure d'ailleurs mon nouveau système de ge...
Raoul dans Débuter avec Yii2 sur un WAMP Portable : très bon tuto pour commencer avec Yii2. Perso, plutôt que d'utiliser un template alternatif je pr...