Formation Magento 2 : Chapitre 8 – Partie B

Magento dispose de ses méthodes pour mettre en place des cookies, et les supprimer.
Il est déconseillé de passer par les méthodes de base de PHP.

Créer un cookie

Nous allons commencer par créer un controller pour tester notre ajout de cookie :
app/code/Maxime/Jobs/Controller/Cookie/Testaddcookie.php

Mettez-y le code suivant :

<?php
namespace Maxime\Jobs\Controller\Cookie;
class Testaddcookie extends \Magento\Framework\App\Action\Action
{
    const JOB_COOKIE_NAME = 'jobs';
    const JOB_COOKIE_DURATION = 86400; // lifetime in seconds

    /**
     * @var \Magento\Framework\Stdlib\CookieManagerInterface
     */
    protected $_cookieManager;

    /**
     * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory
     */
    protected $_cookieMetadataFactory;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
     * @param \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager,
        \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory
    )
    {
        $this->_cookieManager = $cookieManager;
        $this->_cookieMetadataFactory = $cookieMetadataFactory;
        parent::__construct($context);
    }

    public function execute()
    {
        $metadata = $this->_cookieMetadataFactory
            ->createPublicCookieMetadata()
            ->setDuration(self::JOB_COOKIE_DURATION);

        $this->_cookieManager->setPublicCookie(
            self::JOB_COOKIE_NAME,
            'MY COOKIE VALUE',
            $metadata
        );

        echo('COOKIE OK');
    }
}

Notez que vous n’êtes pas obligés de passer par une classe particulière, vous pouvez injecter le CookieMetadataFactory et le cookieManager dans la classe de votre choix en l’ajoutant dans la méthode construct.

Maintenant rendez vous à l’URL suivante :

http://magento2.lan/jobs/cookie/testaddcookie

Si vous regardez vos cookies vous devriez voir celui que l’on vient de créer :

cookie_value

Sa durée de vie est de 24h (86400 secondes).

Vous pouvez également choisir le path et le domain de votre cookie :

$metadata = $this->_cookieMetadataFactory
->createPublicCookieMetadata()
->setPath('YOUR PATH')
->setDomain('YOUR DOMAIN')
->setDuration(self::JOB_COOKIE_DURATION);

Lire un cookie

Pour lire le cookie que nous venons de créer, nous allons ajouter un nouveau controller :
app/code/Maxime/Jobs/Controller/Cookie/Testgetcookie.php

Avec le code suivant :

<?php
namespace Maxime\Jobs\Controller\Cookie;
class Testgetcookie extends \Magento\Framework\App\Action\Action
{
    /**
     * @var \Magento\Framework\Stdlib\CookieManagerInterface
     */
    protected $_cookieManager;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
    )
    {
        $this->_cookieManager = $cookieManager;
        parent::__construct($context);
    }

    public function execute()
    {
        $cookieValue = $this->_cookieManager->getCookie(\Maxime\Jobs\Controller\Cookie\Testaddcookie::JOB_COOKIE_NAME);
        echo($cookieValue);
    }
}

Nous n’avons pas besoin de CookieMetadata ici, le cookieManager nous suffit.

Si vous allez sur la page :

http://magento2.lan/jobs/cookie/testgetcookie

Vous verrez la valeur du cookie que l’on vient de créer.

Supprimer un cookie

Nous allons créer notre dernier controller pour supprimer le cookie :
app/code/Maxime/Jobs/Controller/Cookie/Testdeletecookie.php

Qui contient :

<?php
namespace Maxime\Jobs\Controller\Cookie;
class Testdeletecookie extends \Magento\Framework\App\Action\Action
{
    /**
     * @var \Magento\Framework\Stdlib\CookieManagerInterface
     */
    protected $_cookieManager;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
    )
    {
        $this->_cookieManager = $cookieManager;
        parent::__construct($context);
    }

    public function execute()
    {
        $this->_cookieManager->deleteCookie(
            \Maxime\Jobs\Controller\Cookie\Testaddcookie::JOB_COOKIE_NAME
        );

        echo('COOKIE DELETED');
    }
}

Notez qu’il est également possible de définir le path et le domain du cookie à supprimer, celà nécessite d’ajouter l’objet cookieMetadataFactory à votre classe et voici le code à utiliser :

$this->_cookieManager->deleteCookie(
\Maxime\Jobs\Controller\Cookie\Testaddcookie::JOB_COOKIE_NAME,
$this->_cookieMetadataFactory
->createCookieMetadata()
->setPath('YOUR PATH')
->setDomain('YOUR DOMAIN')
);

La méthode crado

Il est possible de passer par l’objectManager pour récupérer le cookieManager et ainsi créer votre cookie où vous le souhaitez :

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cookieManager = $objectManager->get('Magento\Framework\Stdlib\CookieManagerInterface');
// set cookie value
$cookieManager->setPublicCookie('unclean_cookie', 'Unclean Value');
//get cookie value
$cookieManager->getCookie('unclean_cookie');

Mais cette méthode n’est pas du tout conseillée !

Continuer la formation
Revenir à la partie précédente
Les cookies et Magento 2
Taggé sur :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous utilisons des cookies afin de nous assurer de vous proposer la meilleure expérience sur ce site.
Ok