mardi 15 janvier 2013

Utilisation des composants de base

Exercice 1 : Zend_Loader

1) Créer le dossier /www/htdocs/examples

2) Créer le fichier zend_loader.php dans le dossier examples/

3) Utilisez le composant Zend_View en le chargeant manuellement avec Zend_Loader

4) Utilisez le composant Zend_Date en le chargeant automatiquement avec Zend_Loader


Exercice 2 : Zend_Config

1) Créez le fichier /www/htdocs/examples/ZendConfig.ini

2) Chargez dans le fichier PHP /www/htdocs/examples/ZendConfig.php les paramètres définies dans /www/htdocs/examples/ZendConfig.ini


Exercice 3 : Zend_Log

1) Créez le dossier /www/htdocs/log/ et donnez lui les droits du groupe www-data

2) Créez le fichier /www/htdocs/examples/ZendLog.php et, en utilisant Zend_Log(), écrivez le message log "An error has been detected" de priorité INFO dans le fichier /www/htdocs/log/zend.log


Exercice 4 : Zend_Debug

1) Dans le fichier /www/htdocs/examples/ZendDebug.php que vous créerez, utilisez Zend_Debug::dump() pour afficher la liste des noms des classes déclarées dans le script courant


Exercice 5 : Zend_Registry

1) Dans le fichier /www/htdocs/examples/ZendRegistry.php que vous créerez, complétez le script suivant afin que la propriété prop de l'objet $obj prenne la valeur 'value' et l'affiche

<?php

// On charge l'autoLoader
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);

$obj = new stdClass;
Zend_Registry::set('monobjet', $obj);

class UneClasse
{
    public function __construct()
    {
        [A COMPLETER] = 'value';
    }
}

$a = [A COMPLETER];
echo [A COMPLETER]; // value

Correction de l’exercice 1

Zend loader permet le chargement des classes du répertoire library. il est utilisé à la place de include et require traditionnels Zend loader peut être utiliser de deux façons :

  • Pour le chargement manuel d'une classe ou d'un fichier PHP à chaque fois que l'on veut s'en servir
  • Pour le chargement automatique qui permet l'appel automatique de Zend_Loader lorsque PHP veut utiliser un classe ( ce procéder s'appelle autoload)

L'autoload est le plus utilisé et affecte les temps de réponses des serveurs de manière de moins en moins significative au fur et à mesure de l'apparition de nouvelles versions PHP.

Pour une raison de simplicité, nous allons créer un dossier examples/ dans /www/htdocs/

$ mkdir /www/htdocs/examples
$ cd /www/htdocs/examples

On va commencer par créer le fichier zend_loader.php dans notre dossier /www/htdocs/examples

$ nano zend_loader.php

En utilisant le chargement manuel :

// Inclusion du composant Zend_Loader
include 'Zend/Loader.php';

// Utilisation de Zend_Loader pour utiliser Zend_View
Zend_Loader::loadClass('Zend_View');

// Création d’un objet Zend_View
$view = new Zend_View();

var_dump($view);

En utilisant le chargement automatique :

// Inclusion de la classe Zend_Loader
require_once 'Zend/Loader/Autoloader.php';

// Déclaration du chargement automatique
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);

// Utilisation d’une classe sans chargement manuel
$date = new Zend_Date();

var_dump($date);

Correction de l’exercice 2

Zend_Config est conçu pour simplifier l'accès et l'utilisation des données de configuration dans les applications. Il fournit une interface utilisateur basée sur des propriétés d'objets imbriquées. Les données de configuration peuvent venir de sources variées supportant une organisation hiérarchique des données.

On commence par créer notre fichier ZendConfig.ini dans notre dossier /www/htdocs/examples/ :

$ nano /www/htdocs/examples/ZendConfig.ini

On y colle notre fichier de configuration :

; Directives de configuration de la production

[prod]
database.host = dbserver
database.user = dbuser
database.pass = dbprodpass
database.name = dbname

; Directives de configuration de la dev
; Ces directives héritent de la production

[dev : prod]
database.host = localhost
database.pass = dbpass

On enregistre et on quitte.

Maintenant nous avons besoin du code PHP qui nous permettra d’appeler les variables définies dans le .ini :

On créé le fichier ZendConfig.php toujours dans notre dossier /www/htdocs/examples/ :

$ nano /www/htdocs/examples/ZendConfig.php
<?php

// Affichage en mode texte (pour la lisibilité de l’exemple)
header('Content-type: text/plain; charset=utf-8');

// On charge l'autoLoader
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);

// Création d’un objet contenant les directives de dev
$configFile = dirname(__FILE__) . '/ZendConfig.ini';
$config = new Zend_Config_Ini($configFile, 'dev');

// Utilisation de Zend_Config_Ini
echo 'Database : ' . $config->database->name . "\n";
echo 'Hostname : ' . $config->database->host . "\n";
echo 'Username : ' . $config->database->user . "\n";
echo 'Password : ' . $config->database->pass . "\n";

On enregistre et on quitte.

On test dans notre navigateur :

Nous pouvons maintenant utiliser nos paramètres du fichier .ini directement dans PHP


Correction de l’exercice 3

Zend_Log est un composant destiné à tous les usages du log. Il supporte l'écriture multiple centralisée, formate les messages envoyés vers les logs, et les filtre.

On créé le dossier qui va recevoir nos fichiers logs :

$ mkdir /www/htdocs/log/
On accorde les droits du groupe www-data au dossier afin que PHP puisse écrire dedans :
$ chown www-data:www-data /www/htdocs/log/

On créé le fichier ZendLog.php

$ nano /www/htdocs/examples/ZendLog.php
<?php
// On charge l'autoLoader
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);

// Création de l’objet log
$log = new Zend_Log();

// Enregistrement du journal sur l’écran (affichage)
$writer = new Zend_Log_Writer_Stream("/www/htdocs/log/zend.log");

// Ajout de l’enregistreur dans l’objet log
$log->addWriter($writer);

$log->log("An error has been detected", Zend_Log::INFO);

On exécute notre script en lançant ZendLog.php depuis le navigateur.

Une fois terminé, un fichier zend.log devrait avoir fait son apparition dans le dossier log que nous avons créé précédemment.

L'utilisation de Zend_Log() nous permet donc de stocker des logs dans des fichiers bien spécifiques

Exemple d'utilisation :

if ($success)
{
    /*
    Code PHP
    */
}
else
{
    $log->log("Echec dans l'exécution du script Script.php", Zend_Log::INFO);
}

Notez que vous pouvez utiliser les priorités suivantes :

EMERG   = 0;  // Urgence : le système est inutilisable
ALERT   = 1;  // Alerte: une mesure corrective doit être prise immédiatement
CRIT    = 2;  // Critique : états critiques
ERR     = 3;  // Erreur: états d'erreur
WARN    = 4;  // Avertissement: états d'avertissement
NOTICE  = 5;  // Notice: normal mais état significatif
INFO    = 6;  // Information: messages d'informations
DEBUG   = 7;  // Debug: messages de déboguages

Correction de l'exercice 4

La méthode statique Zend_Debug::dump() affiche et/ou retourne les informations concernant une expression. Cette technique simple de débogage est commune, parce que facile à utiliser de façon ad hoc et n'exigeant aucune initialisation, aucun outils spéciaux, ou environnement de mise au point.

Zend_Debug::dump($var, $label = null, $echo = true);

On créé notre fichier /www/htdocs/examples/ZendDebug.php

$ nano /www/htdocs/examples/ZendDebug.php
<?php

// On charge l'autoLoader
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);

Zend_Debug::dump(get_declared_classes());

Autre exemple d'utilisation avec un objet :

<?php

// On charge l'autoLoader
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);

// Création de l’objet log
$log = new Zend_Log();

// Enregistrement du journal sur l’écran (affichage)
$writer = new Zend_Log_Writer_Stream("/www/htdocs/log/zend.log");

// Ajout de l’enregistreur dans l’objet log
$log->addWriter($writer);

Zend_Debug::dump($log);

Correction de l'exercice 5

Un registre est un conteneur pour stocker des objets et des valeurs dans l'espace d'application. En stockant la valeur dans le registre, le même objet est toujours disponible partout dans votre application. Ce mécanisme est une alternative à l'utilisation du stockage global.

L'utilisation typique des registres dans Zend Framework est par des méthodes statiques dans la classe Zend_Registry. Alternativement, la classe est un tableau, donc vous pouvez avoir accès aux éléments stockés avec une interface semblable au tableau.

Exemple d'utilisation :

Zend_Registry::set('index', $value);
$value = Zend_Registry::get('index');

On créé notre fichier /www/htdocs/examples/ZendRegistry.php

<?php

// On charge l'autoLoader
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->setFallbackAutoloader(true);

$obj = new stdClass;
Zend_Registry::set('monobjet', $obj);

class UneClasse
{
    public function __construct()
    {
        Zend_Registry::get('monobjet')->prop = 'value';
    }
}

$a = new UneClasse;
echo $obj->prop; // value

Aucun commentaire:

Enregistrer un commentaire