Présentation

PHP, en standard, n'est pas capable de lire des objets depuis la session s'ils ne sont pas connus avant le démarrage de cette dernière.

Ainsi, s'il existe dans la session un objet "foo" qui n'a pas été déclaré avant l'appel à session_start, alors PHP ne sait pas relire l'objet en question.

En PHP5, nous disposons d'un système d'autoload pour permettre à PHP de charger automatiquement certaines classes, simplement en réalisant une méthode capable de charger la définition d'une classe à partir de son nom. Cette méthode peut toutefois sembler lourde lorsque l'objet que l'on souhaite mettre en session n'est pas habituel.

Ainsi, Copix propose un objet CopixSessionObject qui va vous permettre de placer des objets inconnus à PHP en session, tout en lui donnant un système pour relire cet objet de façon transparente.

En standard, vous pouvez passer à CopixSessionObject n'importe quel DAO, Record ou classe Copix standard, ce dernier se débrouillera tout seul (dans 80% des cas) pour savoir comment inclure sa définition.

Utilisation avec des DAO

Avec des DAO

Voilà comment placer un objet DAO en session.

$dao = new CopixSessionObject (_ioDAO ('monDAO'));
$dao->findAll ();//toutes les méthodes de l'objet sont appelables directement via CopixSessionObject.
$_SESSION['QUELQUE_PART'] = $dao;

Tous les appels (méthodes et propriétés) que vous pourrez faire à l'objet CopixSessionObject seront automatiquement transmis au "vrai" DAO, rendant l'utilisation de l'objet de session complètement transparent.

Vous pouvez également, si vous le souhaitez, spécifier explicitement le sélecteur de DAO que vous avez utilisé, par exemple :

$dao = new CopixSessionObject (_ioDAO ('monDAO'), 'monModule|monDAO');//on spécifie comment on a obtenu le DAO
$_SESSION['QUELQUE_PART'] = $dao;

Avec des records

Tous les éléments valables pour les DAO le sont également pour les record.

exemple

$_SESSION['QUELQUE_PART'] = new CopixSessionObject (_record ('monDAO'));
$_SESSION['QUELQUE_PART'] = new CopixSessionObject (_record ('monModule|monDAO'), 'monModule|monDAO');

Avec des classes métiers

Par défaut, lorsque vous passez un objet (qui n'est pas un DAO ou un record) à CopixSessionObject, celui ci considère que c'est un objet que vous avez instancié via CopixClassesFactory et se servira de cette dernière fabrique pour le récupérer.

$_SESSION['QUELQUE_PART'] = new CopixSessionObject (_class ('maClasse'));
//Ou en spécifiant explicitement la façon de le charger via le sélecteur
$_SESSION['QUELQUE_PART'] = new CopixSessionObject (_class ('monModule|maClasse'), 'monModule|maClasse');

Note : Encore une fois, toutes les méthodes et propriétés de l'objet sont manipulables directement depuis l'objet session.

Avec des objets autres

En dernier lieu, si vous souhaitez placer un objet PHP en session qui n'est ni un DAO, ni un record, ni une classe instanciée via CopixClassesFactory, vous pouvez simplement spécifier le chemin de la définition de l'objet.

exemple :

require_once ('bibliotheque_tierce.php');
$_SESSION['QUELQUE_PART'] = new CopixSessionObject (new ObjetTiers (), 'bibliotheque_tierce.php');

Avec des objets gérés par l'autoload

Si votre objet est géré par l'autoload, alors vous pouvez spécifier à CopixSessionObject de ne pas tenter des manipulations partiulières pour le prendre en charge.

new CopixSessionObject (new ObjetAutoloaded (), CopixSessionObject::AUTOLOADED);

Note : Pour toutes les classes Copix standard (dont le nom commence par 'Copix'), il est inutile de spécifier explicitement cette information.

Méthode supplémentaire

CopixSessionObject dispose d'une seule méthode propre qui est getSessionObject ().

Cette méthode retourne l'objet encapsulé par CopixSessionObject.

exemple

$objetSession = new CopixSessionObject ($dao = _dao ('daoAuto'));
$dao === $objetSession->getSessionObject ();//OUI
$dao === $objetSession; //NON

Voir aussi