कुकी Magento 2 कैसे जोड़ें?


16

मैं मूल्य और कुछ अवधि के साथ एक सीओकेआईआई जोड़ना चाहता हूं , इसे मैगनेटो 2 में कैसे करें।

धन्यवाद

जवाबों:


27

IMO का सबसे अच्छा तरीका यह होगा कि कुकी निर्माण को लपेटने के लिए एक वर्ग बनाया जाए और फिर जहाँ आप चाहें उसका उपयोग करें।

कुकी वर्ग

{विक्रेता} / {मॉड्यूल} /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
        );
    }
}

यह उदाहरण Magento \ Framework \ App \ PageCache \ FormKey पर आधारित था और नाम "उदाहरण" के साथ एक कुकी का प्रतिनिधित्व करता है

यदि आप $ मेटाडेटा ( PublicCookieMetadata ) में कुछ कस्टम गुण जोड़ना चाहते हैं , तो पथ, http_only, आदि को बदलने के लिए आपको set()और / या delete()विधि (s) को रिफ्लेक्टर करना चाहिए ।

इसका इस्तेमाल कैसे करें

आप लगभग कहीं भी ऑब्जेक्ट मैनेजर का उपयोग करके उस वर्ग तक पहुँच सकते हैं (बदसूरत दृष्टिकोण):

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$objectManager->get('Vendor\Module\Cookie\Example')
    ->set('value', 3600);

"जहाँ" के आधार पर आपको कुकी बनाने की आवश्यकता होती है, आप अपनी कक्षा के निर्माता पर एक नज़र डाल सकते हैं, हो सकता है कि आपके पास पहले से ही एक वस्तु प्रबंधक हो, यदि नहीं तो आप इसे निर्माता में इंजेक्ट भी कर सकते हैं।


@जे। जॉन, अरे! i juts ने देखा कि आपने इसका संपादन करते समय उत्तर स्वीकार कर लिया है, बस अब एक बार देख लें, क्योंकि मैंने कार्यान्वयन को आसान बनाने के लिए कई बदलाव किए हैं।
मौरोनिग्रेले

3
मैंने त्रुटि को हल करने के लिए विधि में संपादित createCookieMetaData()किया createPublicCookieMetadata()है set(घातक त्रुटि)। स्मार्ट दृष्टिकोण हालांकि!
आरटी

Magento\Framework\Session\SessionManagerInterfaceआपके द्वारा उपयोग किए जाने वाले और Magento\Framework\Session\Config\ConfigInterfaceउपयोग में क्या अंतर है Magento\Framework\Session\SessionManager?
लुकस्कु

@MauroNigrele फंक्शन कॉल सेट और डिलीट मेथड में createPublicCookieMetadata के बजाय createCookieMetadata
शिवम

1
दोस्तों। मैंने परिवर्तन प्रस्तावित किए हैं क्योंकि $this->createPublicCookieMetadata()इस वर्ग में मौजूद नहीं है। यह $this->cookieMetadataFactory->createPublicCookieMetadata() Magento के रेपो में देखा जाना चाहिए । लेकिन मुझे 2 रिजेक्ट मिले हैं। LOL ...
spiil

-1

आप इस तरह php मूल फ़ंक्शन का उपयोग करके कुकी सेट और प्राप्त कर सकते हैं:

//set cookie
$cookie_name = "magento";
$cookie_value = "How to Cookie";
setcookie($cookie_name, $cookie_value, time()+3600); /* expire in 1 hour */

//get cookie
if(!isset($_COOKIE[$cookie_name])) {
    echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
    echo "Cookie '" . $cookie_name . "' is set!<br>";
    echo "Value is: " . $_COOKIE[$cookie_name];
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.