Archives par étiquette : mysql

Création d’un état avec niveau de regroupement

Dans un rapport Microsoft Access, il est possible de créer des niveaux de regroupement sur des champs d'une table ou d'une requête. Comment réaliser ces mêmes états sous ZF2 / MySql avec TcPdf ?

Exemple concret

Soit 2 tables, eleves et tarifs définies de la manière suivante :

Table eleves :

Table tarifs :

On souhaite créer un état qui affiche la liste des élèves par tarif, avec un sous-total à la fin de chaque groupe de tarifs, et le total général à la fin de l'état.

 Création de la requête

On a 3 parties dans la requête :

  • le détail de chaque groupe contenant les élèves
  • le pied de chaque groupe contenant le nombre d'élèves du groupe et le montant total du groupe
  • la marge du bas contenant le nombre total d'élèves et le total général

On codera 'd'  pour 'détail', 'p' pour 'pied', 'g' pour 'groupe', 'm' pour 'marge'. On remarquera que le codage respecte l'ordre d'affichage :

  • 'g' avant 'm'
  • 'd' avant 'p'

On obtient un résultat convenable par :

Pour la mise en page, on aura sans doute intérêt à afficher les colonnes c1, c2 et c3.

etat-niveau-regroup1

avec PhpMyAdmin

 

WampServer et ZendFramework

Je développe plusieurs projets sous Zendframework 1 et 2. Par commodité j'ai choisi de mettre en place un virtualhost par projet afin ce coller au mieux à la configuration de production propre à chacun de mes clients.

Jusqu'à maintenant, j'utilisais pour le développement un Zend Server Community Edition 5.6 (licence gratuite) mais je n'ai pas trouvé comment faire évoluer gratuitement les versions de Php. Aussi je viens d'installer WampServer 2.4 comme serveur de développement, sous Windows 7. Il est composé de :

  • Apache 2.4.4
  • MySql 5.6.12
  • Php 5.4.12
  • PhpMyAdmin 4.0.4
  • SqlBuddy 1.3.3
  • XDebug 2.2.3

Si les mises à jour de WampServer semblent plus faciles à gérer, ce service semble légèrement plus lent (pas grave en développement) et sa configuration diffère sensiblement de celle de Zend Server.

Cet article détaille les configurations que j'ai faites.

Configuration de MySql

Avant d'installer WampServer, il faut s'assurer que le service MySql n'est pas démarré, sinon l'installation risque à bloquer au moment de la mise en place de MySql.

Un dump des bases de données est fait avant l'arrêt du service MySql précédent.

Une fois l'installation de WampServer terminée, je constate que le service MySql fonctionne :

 

Reste quelques opérations à faire :

  • créer un mot de passe pour root. J'utilise la console pour plus de facilité :
  • s'assurer que le path de l'ordinateur pointe bien sur le répertoire bin de la bonne version de MySql (chez moi, il pointait toujours sur la version précédente ce qui fait que mysqladmin et mysqldump ne correspondaient pas à la bonne version).
    variables-d-environnement
    (On en profite aussi pour rajouter le chemin de php.exe qui sera utile par la suite)
  • recharger en premier le dump de la base mysql et ensuite ceux des autres bases.

 Configuration d'apache

Comme toujours, la configuration d'apache se trouve dans son répertoire conf, dans le fichier httpd.conf. On aura besoin de charger le module rewrite et de faciliter la création des virtualhosts. Pour cela, j'apporte les modifications suivantes :

  • décommenter la ligne suivante :
  • ajouter la ligne suivante :

    Ainsi, chaque virtualhost sera configuré dans un fichier indépendant du répertoire vhosts de wamp et il n'y aura plus à retoucher ce fichier httpd.conf. Le nom du fichier doit commencer par vhost_ et l'extension est .conf.
  • créer un virtualhost pour localhost.
    En effet, lorsqu'on crée un virtualhost, l'alias localhost ne fonctionne plus. Pour régler ce problème, je crée le fichier vhosts/vhost_localhost.conf suivant :

    La définition des droits de ce répertoire est contenue dans httpd.conf donc on n'a pas besoin d'y retoucher.
  • exemple d'un virtualhost pour un projet jobeet utilisant Zendframework 2 :

importantPassant de la version 2.2 à la version 2.4 d'apache, on notera ici la nécessité de se référer à la documentation d'Apache pour remplacer les directives Order, Allow et Deny par la directive Require.

Il peut être intéressant pour les projets qui n'utilisent pas Zendframework de rajouter dans le bloc <Directory> la ligne :

afin de pouvoir lister le contenu des répertoires (nous sommes sur un serveur de développement). Cela n'a pas d'utilité avec Zendframework puisque tout démarre de public/index.php.

Configuration de PHP

La spécificité de WampServer  est d'utiliser deux fichiers php.ini, l'un  pour la console (pour moi dans le dossier phpphp5.4.12) et l'autre pour le serveur web (pour moi dans apacheApache2.4.4bin). Or l'activation d'une extension par l'outil d'administration de wamp n'intervient que sur le fichier php.ini d'apache ... et encore, de façon imparfaite.

Pour activer une extension, il faut décommenter la ligne de cette extension dans les deux fichiers php.ini.
importantPour l'extension intl, il faut en outre copier les fichiers icu*.dll du dossier phpphp5.4.12 dans le dossier apacheApache2.4.4bin. Sans cela, apache ne charge pas cette extension dans php.

Ne pas oublier de redémarrer les services après toute modification de php.ini.

Installation de PEAR

Bien évidemment, on aura besoin de pear, ne serait-ce que pour effectuer des tests unitaires avec PhpUnit... et pear n'est pas dans le paquet d'installation de WampServer.

Voici la procédure à suivre :

  • télécharger go-pear.phar et l'enregistrer dans le répertoire de la version de php (celui qui contient php.exe - ici, j'ai le dossier php5.4.12 au moment où je rédige cet article).
  • ouvrir une console (démarrer / cmd) et se placer dans ce répertoire et lancer la commande :

    console-dossier-php Répondre local et valider.
  • Il y a maintenant 12 paramètres à fournir pour l'installation. Valider tous les répertoires proposés par défaut (chez moi de 1 à 11). Compléter éventuellement (pour le 12e paramètre - Path to CLI php.exe - j'indique le chemin C:Program Fileswampbinphpphp5.4.12).
  • Autoriser la modification de php.ini pour prendre en compte le chemin des extensions de pear (ici, C:Program Fileswampbinphpphp5.4.12pear) dans la variable include_path.
  • Il semble qu'il y ait 2 fichiers php.ini, l'un dans le dossier de la version de php (ici php5.4.12) et l'autre dans le dossier d'Apache. Le gestionnaire de WampServeur propose de modifier le fichier php.ini. Il s'agit de celui contenu dans le dossier d'Apache, alors que la procédure d'installation de pear modifie celui du dossier de la version de php. On va donc rapporter la modification réalisée dans le php.ini d'Apache :
  • Il reste à surcharger les variables d'environnement de l'ancienne installation de pear avec Zend Server :
    • PHP_PEAR_BIN = C:Program Fileswampbinphpphp5.4.12
    • PHP_PEAR_DAT = C:Program Fileswampbinphpphp5.4.12data
    • PHP_PEAR_DOC = C:Program Fileswampbinphpphp5.4.12docs
    • PHP_PEAR_INSTALL_DIR = C:Program Fileswampbinphpphp5.4.12pear
    • PHP_PEAR_PHP_BIN = C:Program Fileswampbinphpphp5.4.12php.exe
    • PHP_PEAR_SYSCONF_DIR = C:Program Fileswampbinphpphp5.4.12
    • PHP_PEAR_TEST_DIR = C:Program Fileswampbinphpphp5.4.12tests
  • Maintenant on vérifie que pear fonctionne. console-pear-list

 Installation de PhpUnit

  • Ajout des channels nécessaires :
  • Installer PhpUnit :
  • Pour le bon fonctionnement de PhpUnit, notamment phpunit --self-update, on doit pouvoir charger l'extension openssl. L'outil d'administration qui permet de charger les extension ne suffit pas parcequ'il n'intervient que sur le fichier php.ini d'Apache alors que phpunit sera lancé en console. Il faut donc modifier manuellement le fichier php.ini du répertoire de la version de php (ici wamp/bin/php/php5.4.12/php.ini).
    Dans ce fichier, décommenter la ligne :

    puis redémarrer les services de wamp. On vérifiera à partir d'une console (cmd) que l'extension openssl est chargée en lançant la commande :

console-phpunit-channels

 Installation de Zendframework 1

Etant donné que ces projets évolueront peu, j'ai choisi de placer la librairie de Zendframework 1 dans un seul répertoire qui sera disponible pour tous les projets. J'y ai rajouté la documentation.

 

Cela nécessitera de référencer ce dossier library dans l'include_path de php. Toutefois, afin de pouvoir facilement faire évoluer les versions de Zendframework et de rester indépendant de le configuration, j'ai décidé de placer cette référence dans le .htaccess du projet et de modifier le fichier public/index.php des projets.

Voici le .htaccess :

A noter qu'il sera sans doute nécessaire de supprimer de l'affichage les alertes de compatibilité que PHP 5.4 envoie. Pour cela, il faut rajouter dans .htaccess la ligne :

Voici l'entête de mes fichiers index.php :

Installation de Zendframework 2

Pour ZF2, j'utilise composer.phar qui installe une librairie ZF2 dans chaque projet et met à jour les fichiers autoloader. Je n'ai donc pas trouvé utile d'installer la librairie du framework.

Soit on part du projet Zend Skeleton, soit on installe composer.phar dans le dossier racine du projet par la commande :

à condition que curl soit installé, bien évidemment.