PHP / Framework ZEND




Expertise (5/5)



J'utilise PHP depuis plus de 15 ans. Initialement, je développais des services WEB qui s'intégraient au sein de grands systèmes d'information. Puis, progressivement, pour des besoins personnels, j'ai utilisé le framework ZEND (développement de sites pour des particuliers). J'ai aussi développé (en PHP) de nombreux greffons pour le moteur de réseau social ELGG, ainsi que pour le CMS Joomla.

Quelques packages Composer.


Création d'un module PHP (pour PHP4)

J'ai écrit, il y a quelques années déjà, des modules pour PHP4. Concrètement, il s'agit de librairies dynamiquement changeables. À l'époque, j'ai développé, en particulier, un module qui implémentait un algorithme de chiffrage particulier. De nos jours, il n'est guère nécessaire de développer ses propres modules.

Généralités

L'exemple de code ci-dessous présente un module très simple qui exporte une fonction. Cette fonction effectue la somme des deux arguments qui lui sont fournis en argument.

Déclaration du module (newfunc.h)

Implémentation du module (newfunc.c)

Makefile

HTML

Résultat

Passage des paramètres de type scalaire

Le code ci-dessous illustre le fait que les arguments de la (nouvelle) fonction PHP sont passés par valeur, et non par adresse.

ou (code équivalent)

HTML

Résultat. Remarquez que la valeur de la variable "a" n'a pas changé.

Utilisation des chaînes de caractères

Documentation :

 

One thing you must know is that ALL string returned by a PHP function must have been allocated using emalloc(). PHP will free it (using "efree"), so if you did not use emalloc ... you are in big trouble.

There are two kinds of memory in this program. Memory which is returned to the parser in a variable and memory which you need for temporary storage in your internal function. When you assign a string to a variable which is returned to the parser you need to make sure you first allocate the memory with either emalloc or estrdup. This memory should NEVER be freed by you, unless you later, in the same function overwrite your original assignment (this kind of programming practice is not good though).

For any temporary/permanent memory you need in your functions/library you should use the three emalloc(), estrdup(), and efree() functions. They behave EXACTLY like their counterpart functions. Anything you emalloc() or estrdup() you have to efree() at some point or another, unless it's supposed to stick around until the end of the program, otherwise there will be a memory leak. The meaning of "the functions behave exactly like their counterparts" is if you efree() something which was not emalloc()'ed nor estrdup()'ed you might get a segmentation fault. So please take care and free all of your wasted memory. One of the biggest improvements in PHP 3.0 will hopefully be the memory management.

 
Implémentation du module (newfunc.c)

HTML

Résultat

Conversion en UTF-8

Il arrive que vous deviez convertir une série de fichiers en UTF8. Le script Perl suivant effectue cette tâche. Il convertit tous les fichiers PHP présents dans un répertoire donné en UTF8.


Upload de fichier

L'envoi de fichier vers un serveur peut parfois dérouter les débutants... Ce code très simple illustre la procédure à suivre.

PHP simple


Framework ZEND


HTML

ZF: Analyse de la ligne de commande

ZF: Zend_Db, l'interface du framework ZEND avec la base de donnée.

Exemple

Tables MySql


La figure ci-dessous représente les relations entre les tables.



Fichier de configuration


Initialisation des tables


Utilisation




Zend Framework INI file
Tableau

Table de hachage (ou dictionnaire)

Si l'on ne tient pas compte de l'utilisation éventuelle de la classe d'amorçage ("Bootstrap.php"), une ressource est initialisée seulement si elle apparaît dans le fichier d'initialisation (".ini"). Ainsi, pour initialiser la vue, il faut insérer la ligne dans le fichier d'initialisation de l'application :

resources.view =

Dans le fichier d'initialisation de l'application, les délimiteurs de chaîne ne sont pas interchangeables.

Il est conseillé d'utiliser le guillemet double (").

La ligne ci-dessous produit le résultat escompté.
APPLICATION_PATH "/../logs/application.log"

La ligne ci-dessous génère l'insertion d'un espace indésirable à l'endroit de la concaténation.
APPLICATION_PATH '/../logs/application.log'

Zend Framework ".htaccess"

ZF: Configuration du chargement automatique de classes

La configuration du chargeur de classe peut se faire à deux endroits :

Dans les exemples qui suivent, les classes dont le nom commence par les préfixes"My_" et "Libs_" seront automatiquement chargées lors de leur utilisation.

Dans le fichier d'initialisation de l'application


Au niveau du point d'entrée de l'application


ZF: Configuration du chargement automatique de ressources

Le code ci-dessous déclare un chargeur automatique de ressources.



ZF: Les aides d'action
L'aide d'action (Fichier: My/ActionsHelpers/MyHelper.php).

Configuration du chargeur d'aides d'action.

Utilisation de l'aide d'action dans le contrôleur.

ZF: Initialisation des ressources au niveau de la classe d'amorçage

Dans l'exemple qui suit, on initialise la ressource "session" à l'intérieur de la classe d'amorçage de l'application. Il est aussi possible d'initialiser cette ressource dans le fichier d'initialisation de l'application.


ZF: Greffon de ressource

Création d'une ressource personnalisée

Il est possible de définir ses propres ressources, implémentées sous la forme de classes.

Dans l'exemple ci-dessous :


ATTENTION !!! Le nom du fichier PHP doit se composer uniquement de caractères minuscules, sauf le premier caractère!


Initialisation de la ressource

L'initialisation de la ressource se fait dans le fichier d'initialisation de l'application.

Note: Le nom utilisé pour désigner la ressource est défini par la propriété "$_explicitType" de la classe qui implémente la ressource (en l'occurrence "My_Resources_Googleajaxsearchapikey").


Accès à la ressource depuis le contrôleur d'action

Note: Le nom utilisé pour désigner la ressource est défini par la propriété "$_explicitType" de la classe qui implémente la ressource (en l'occurrence "My_Resources_Googleajaxsearchapikey").


Accès à la ressource depuis une vue

Note: Le nom utilisé pour désigner la ressource est défini par la propriété "$_explicitType" de la classe qui implémente la ressource (en l'occurrence "My_Resources_Googleajaxsearchapikey").


ZF: Ecrire un validateur de formulaire

La validateur (Ficher: "My/Validators/Login.php")


Utilisation, dans la classe qui implémente le formulaire :


Note: Cet exemple suppose que le chargeur automatique de classe est correctement configuré (autoloaderNamespaces.0 = "My").


Utilisation :





Implémentation

Ecriture de l'aide de vue (Fichier "application/views/standard/helpers/Tagger.php")


Configuration de la vue

Dans la classe d'amorçage


Ou dans le fichier d'initialisation


Utilisation

Depuis une vue


Dans un décorateur


Création dans la classe d'amorçage de l'application.


Utilisation

Il est possible d'insérer de l'information dans le "place holder" depuis n'importe quel fichier PHP qui compose l'application.


Extraction du contenu (dans le fichier de gabarit, par exemple).


Implémentation

Fichier "My\Forms\Decorators\SubmitLink.php".


Utilisation

Le code ci-dessous assigne le décorateur à un élément du formulaire.


Remarque: Il ne faut pas oublier d'initialiser le chargeur de classe ("autoloaderNamespaces.0 = "My"").

L'adaptateur

Fichier "application/models/UsersMapper.php".


La table

Fichier "application/models/DbTable/Users.php"


Accès à la base de donnée


Initialisation de l'application

Dans le fichier d'initialisation de l'application :


Dans la classe d'amorçage de l'application, on crée les adaptateurs vers les bases de données.


Création des tables


Où placer les définitions des modèles de données?

Hypothèse : Vous utilisez la configuration par défaut pour les ressources liées à l'application.


Vous pouvez changer l'emplacement des fichiers qui définissent les modèles de base :



Le point important est le suivant :


  • L'ID de l'élément qui représente le bouton d'envoi est le texte passé au constructeur de l'élément ($submit = new Zend_Form_Element_Submit('submit');).
  • Pour définir le texte qui apparaît sur le bouton, il faut utiliser la méthode "setLabel()" ($submit->setLabel('Envoyer');).

On personnalise le texte qui va apparaître sur l'image (Fichier "My\Captchas\Image.php").


Puis on crée le filtre anti-robot.


Utilisation simple

Dans le fichier d'initialisation de l'application :


Dans le code de l'application :


Utilisation avancée

Dans le fichier d'initialisation de l'application :


Dans la classe d'amorçage de l'application :



Les vues partielles permettent de définir des éléments de vues complexes (ex: des menus de navigation). Ces vues peuvent être insérées dans d'autres vues.

Créer un fichier PHTML qui contient la vur partielle. Exemple "application/views/partials/MenuActions.phtml".

Dans une vue (qui peut être un gabarit) :


Remarque: Il est possible de passer les valeurs aux vues partielles (http://framework.zend.com/manual/fr/zend.view.helpers.html)

Retourner du JSON depuis une action :


Retourner du texte depuis une action :




Le serveur


Le client


Création du WSDL





ATTENTION !!!

En cas de problème, pensez à régénérer les "associations de contenu" ("Generate Binding Content") - comme indiquer sur le figure ci-dessous.

Dans la description WSDL ci-dessous, il faut modifier la ligne ci-dessous (à la fin du WSDL).