Jump to content

Le contexte (suppression des globales)


Recommended Posts

Le contexte est une nouveauté technique de la version 1.5, il a été développé pour correspondre à deux objectifs :

  • Ne plus utiliser dans la mesure du possible des globales qui sortaient d'un peu partout
  • Permettre de pouvoir changer le contexte dans certaines méthodes

Le contexte est une légère implémentation du design pattern Registry, il s'agit d'une classe stockant les principales information de PrestaShop comme le cookie, le customer, l'employé, le cart, smarty, etc..

 

 

Il sera possible d'accéder au contexte dans les controllers (front et back) et les modules de cette façon : $this->context.

Autrement, il sera possible d'y accéder comme ceci : Context::getContext().

 

Exemple, au lieu de faire :

global $cookie;
$language_id = $cookie->language_id;

il faudra faire

$language_id = $this->context->language->id;

 

La compatibilité avec les globales sera maintenue durant la version 1.5 et supprimée pour la prochaine version majeur, alors il faudra adapter les modules pour tirer partie de ces nouvelles bonnes pratiques.

  • Like 2
Link to comment
Share on other sites

dans ce contexte, pour les lang / currency / customer... aura-t-on juste les id ou les objets eux-même ?

Si on est dans le controller product, aura-t-on aussi l'objet Product ?

 

Ceci pour éviter plusieurs instanciations d'un même objet dans plusieurs hook

Link to comment
Share on other sites

Bonjour,

dans le contexte on aura directement les objets. D'ailleurs au lieu d'utiliser cookie->id_language il faudra utiliser directement language->id, un des soucis actuel du code est que trop d'instances sont faîtes, et grâce au contexte on a réduit ça.

Pour ce qui concerne l'accès à l'objet product dans le controller, il s'agit de la conception des controllers et non plus du contexte, mais normalement c'est le cas dans mes souvenirs sur la 1.5.

Link to comment
Share on other sites

D'ailleurs, je parle de Product pour le controller Product, mais c'est vrai aussi pour tout controller qui est en train de gérer une instance en particulier : une catégorie par le controller Category, un Manufacturer, un Shop....

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...