Introduction au Zend Framework

 Apprendre Zend Framework

appendix

 Guide de référence Zend Framework


  •  Zend_Gdata
  •  Zend_Http
  •  Zend_InfoCard
  •  Zend_Json
  •  Zend_Layout
  •  Zend_Ldap
  •  Zend_Loader
  •  Zend_Locale
  •  Zend_Log
  •  Zend_Mail
  •  Zend_Markup
  •  Zend_Measure
  •  Zend_Memory
  •  Zend_Mime
  •  Zend_Navigation
  •  Zend_Oauth
  •  Zend_OpenId
  •  Zend_Paginator
  •  Zend_Pdf
  •  Zend_ProgressBar
  •  Zend_Queue
  •  Zend_Reflection
  •  Zend_Registry
  •  Zend_Rest

  •  Zend_Search_Lucene
  •  Zend_Serializer
  •  Zend_Server
  •  Zend_Service
  •  Zend_Session
  •  Zend_Soap
  •  Zend_Tag
  •  Zend_Test
  •  Zend_Text
  •  Zend_TimeSync
  •  Zend_Tool
  •  Zend_Tool_Framework
  •  Zend_Tool_Project
  •  Zend_Translate
  •  Zend_Uri
  •  Zend_Validate
  •  Zend_Version
  •  Zend_View
  •  Zend_Wildfire
  •  Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 61.2% Update 2010-11-28 - Revision 23149 - Version ZF 1.11.x

    64.2. Usage basique

    Les instances Zend_Session_Namespace fournissent l'API primaire pour manipuler les données de session dans Zend Framework. Les espaces de noms sont utilisés pour isoler toutes les données de session, bien qu'un espace de noms par défaut existe pour ceux qui veulent juste un endroit pour stocker toutes leurs données de session. Zend_Session utilise ext/session et sa superglobale spéciale $_SESSION comme mécanisme de stockage pour les données d'état de session. Bien que $_SESSION est toujours disponible dans l'espace global de PHP, les développeurs devraient s'abstenir d'accéder directement à elle, alors que Zend_Session et Zend_Session_Namespace fournissent plus efficacement et plus solidement leur suite de fonctionnalités liées à session.

    Chaque instance de Zend_Session_Namespace correspond à une entrée dans le tableau de la superglobale $_SESSION, où l'espace de noms est utilisée comme une clé.

    $monNamespace = new Zend_Session_Namespace('monNamespace');

    // $monNamespace corresponds to $_SESSION['monNamespace']

    Il est possible d'utiliser Zend_Session conjointement avec d'autre code utilisant directement $_SESSION. Cependant, pour éviter les problèmes, il est fortement recommandé que ce code utilise seulement les parties de $_SESSION ne correspondant pas aux instances de Zend_Session_Namespace.

    64.2.1. Tutoriel d'exemples

    Si aucun espace de noms n'est spécifié lors de l'instanciation de Zend_Session_Namespace, toutes les données sont stockées de manière transparente dans un espace de noms appelé "Default". Zend_Session n'est pas prévu pour fonctionner directement sur le contenu des conteneurs des espaces de noms. Au lieu de cela, nous utilisons Zend_Session_Namespace. L'exemple ci-dessous montre l'utilisation de cet espace de noms par défaut, en montrant comment compter le nombre de fois qu'un utilisateur a vu une page sur le site Web. Pour tester cet exemple, ajouter le code suivant à votre fichier d'amorçage ZF :

    Exemple 64.1. Compter le nombre de pages vues

    $defaultNamespace = new Zend_Session_Namespace('Default');

    if (isset(
    $defaultNamespace->numberOfPageRequests)) {
        
    $defaultNamespace->numberOfPageRequests++;
        
    // ceci s'incrémente à chaque chargement de page.
    } else {
        
    $defaultNamespace->numberOfPageRequests 1;
        
    // première page
    }

    echo 
    "Page demandée lors de cette session : ",
         
    $defaultNamespace->numberOfPageRequests;

    Quand de multiples modules utilisent des instances de Zend_Session_Namespace ayant différents espaces de noms, chaque module obtient une encapsulation pour ses propres données de session. Le constructeur de Zend_Session_Namespace peut recevoir un paramètre facultatif $namespace, qui permet aux développeurs la partition des données de session dans des espaces de noms séparés. Les espaces de noms fournissent une manière efficace et populaire de protéger un sous-ensemble de données de session contre un changement accidentel dû à des collisions de noms.

    Les noms des espaces de noms sont limités à des chaînes de caractères PHP non-vides qui ne commencent par un tiret-bas ("_"). De plus, seuls les composants coeur de Zend Framework devraient employer un nom d'espace de noms commençant par "Zend".

    Exemple 64.2. Nouvelle méthode : les espaces de noms évitent les collisions

    // Dans le composant Zend_Auth
    $authNamespace = new Zend_Session_Namespace('Zend_Auth');
    $authNamespace->user "monusername";

    // Dans un composant service web
    $webServiceNamespace = new Zend_Session_Namespace('Un_Service_Web');
    $webServiceNamespace->user "monwebusername";

    L'exemple ci-dessus réalise la même chose que celui ci-dessous, excepté que les objets de session ci-dessus préserve l'encapsulation des données de session dans leur espace de noms respectif.

    Exemple 64.3. Ancienne méthode : accès aux sessions PHP

    $_SESSION['Zend_Auth']['user'] = "monusername";
    $_SESSION['Un_Service_Web']['user'] = "monwebusername";

    64.2.2. Énumérer les espaces de noms de session

    Zend_Session_Namespace fournit une interface IteratorAggregate complète, incluant le support de l'instruction foreach :

    Exemple 64.4. Énumération des sessions

    $unNamespace =
        new 
    Zend_Session_Namespace('un_namespace_avec_des_donnes_presentes');

    foreach (
    $unNamespace as $index => $valeur) {
        echo 
    "unNamespace->$index = '$valeur';\n";
    }

    64.2.3. Accesseurs pour les espaces de noms de session

    Zend_Session_Namespace implémente __get(), __set(), __isset(), et __unset(). Les méthodes magiques ne devraient pas être utilisées directement, excepté à l'intérieur d'une sous-classe. Au lieu de cela, utilisez les opérateurs normaux pour appeler ces méthodes magiques, comme :

    Exemple 64.5. Accéder aux données de session

    $namespace = new Zend_Session_Namespace();
    // Espace de noms par défaut

    $namespace->foo 100;

    echo 
    "\$namespace->foo = $namespace->foo\n";

    if (!isset(
    $namespace->bar)) {
        echo 
    "\$namespace->bar n'existe pas\n";
    }

    unset(
    $namespace->foo);

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...