Je veux ajouter un COOKIE avec de la valeur et une certaine durée, comment le faire dans magento 2.
Merci
la source
Je veux ajouter un COOKIE avec de la valeur et une certaine durée, comment le faire dans magento 2.
Merci
OMI, la meilleure approche serait de créer une classe pour envelopper la création de cookies et ensuite l'utiliser simplement où vous le souhaitez.
La classe des cookies
{Vendor} / {Module} /Cookie/Example.php
<?php
namespace Vendor\Module\Cookie;
use Magento\Framework\Stdlib\CookieManagerInterface;
use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;
use Magento\Framework\Session\SessionManagerInterface;
class Example
{
/**
* Name of cookie that holds private content version
*/
const COOKIE_NAME = 'example';
/**
* CookieManager
*
* @var CookieManagerInterface
*/
private $cookieManager;
/**
* @var CookieMetadataFactory
*/
private $cookieMetadataFactory;
/**
* @var SessionManagerInterface
*/
private $sessionManager;
/**
* @param CookieManagerInterface $cookieManager
* @param CookieMetadataFactory $cookieMetadataFactory
* @param SessionManagerInterface $sessionManager
*/
public function __construct(
CookieManagerInterface $cookieManager,
CookieMetadataFactory $cookieMetadataFactory,
SessionManagerInterface $sessionManager
) {
$this->cookieManager = $cookieManager;
$this->cookieMetadataFactory = $cookieMetadataFactory;
$this->sessionManager = $sessionManager;
}
/**
* Get form key cookie
*
* @return string
*/
public function get()
{
return $this->cookieManager->getCookie(self::COOKIE_NAME);
}
/**
* @param string $value
* @param int $duration
* @return void
*/
public function set($value, $duration = 86400)
{
$metadata = $this->cookieMetadataFactory
->createPublicCookieMetadata()
->setDuration($duration)
->setPath($this->sessionManager->getCookiePath())
->setDomain($this->sessionManager->getCookieDomain());
$this->cookieManager->setPublicCookie(
self::COOKIE_NAME,
$value,
$metadata
);
}
/**
* @return void
*/
public function delete()
{
$metadata = $this->cookieMetadataFactory
->createPublicCookieMetadata()
->setDuration($duration)
->setPath($this->sessionManager->getCookiePath())
->setDomain($this->sessionManager->getCookieDomain());
$this->cookieManager->deleteCookie(
self::COOKIE_NAME,
$metadata
);
}
}
Cet exemple était basé sur Magento \ Framework \ App \ PageCache \ FormKey et représente un seul cookie avec le nom "exemple"
Si vous souhaitez ajouter des propriétés personnalisées aux métadonnées $ ( PublicCookieMetadata ) en changeant le chemin, http_only, etc., vous devez refactoriser les méthodes set()
et / ou delete()
.
Comment l'utiliser
Vous pouvez accéder à cette classe en utilisant simplement le gestionnaire d'objets dans presque n'importe où (approche laide):
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$objectManager->get('Vendor\Module\Cookie\Example')
->set('value', 3600);
Selon "où" vous devez créer le cookie, vous pouvez jeter un œil au constructeur de votre classe peut-être que vous avez déjà un gestionnaire d'objets là-bas, sinon vous pouvez également l'injecter dans le constructeur.
createCookieMetaData()
àcreatePublicCookieMetadata()
enset
méthode pour résoudre l'erreur (erreur fatale). Une approche intelligente!Magento\Framework\Session\SessionManagerInterface
utilisé par vous etMagento\Framework\Session\Config\ConfigInterface
utilisé dansMagento\Framework\Session\SessionManager
?$this->createPublicCookieMetadata()
n'existe pas dans cette classe. Ce devrait être$this->cookieMetadataFactory->createPublicCookieMetadata()
See in magento repo . Mais j'ai 2 rejets. LOL ...Vous pouvez définir et obtenir des cookies en utilisant la fonction de base php comme ceci:
la source