ম্যাজেন্টো 2 এ গ্রাহককে প্রোগ্রামগতভাবে কীভাবে যুক্ত করবেন?


13

আমাকে ম্যাজেন্টো 2 এ একটি গ্রাহক প্রোগ্রামক্রমে তৈরি করতে হবে, আমি খুব বেশি ডকুমেন্টেশন খুঁজে পাইনি ... মূলত আমাকে যা করতে হবে তা হল নিম্নলিখিত কোডটি "ম্যাজেন্টো 2" তে অনুবাদ করা:

$websiteId = Mage::app()->getWebsite()->getId();
$store = Mage::app()->getStore();

$customer = Mage::getModel("customer/customer");
$customer   ->setWebsiteId($websiteId)
            ->setStore($store)
            ->setFirstname('John')
            ->setLastname('Doe')
            ->setEmail('jd1@ex.com')
            ->setPassword('somepassword');

try{
    $customer->save();
}

আপনি এটি একটি স্বতন্ত্র স্ক্রিপ্টে করতে চান, বা আপনার কাছে একটি মডেল বা কিছু আছে?
মারিয়াস

@ মারিয়াস, আমি এই মডিউলটিতে কাজ করছি এবং আমি একটি নিয়ামক তৈরি করেছি। এটি এই নিয়ন্ত্রকটি সংরক্ষণ করার জন্য আমার কিছু ডেটা প্রস্তুত করা দরকার এবং গ্রাহক মডেলকে কল করে সেই তথ্যটি সংরক্ষণ করা উচিত। উপরের কোডটি একটি নিয়ামক হিসাবে স্থাপন করা যেতে পারে আমি একই কাজটি করতে চাই তবে ম্যাজেন্টো ২ এর জন্যও I এবং অবজেক্ট উদাহরণস্বরূপ তবে আমি কীভাবে এটি করব তা নিশ্চিত নই ...
এডুয়ার্ডো

উত্তর:


21

ঠিক আছে, কিছুক্ষণ পরে আমি এর সমাধান পেয়েছি অন্য কারও প্রয়োজন হলে .. ম্যাজেন্টো বস্তুগুলি ইনস্ট্যান্ট করার জন্য আরেকটি পদ্ধতির ব্যবহার করে, ম্যাজেন্টো 1.x এ অবজেক্টগুলি ইনস্ট্যান্ট করার প্রচলিত উপায় "ম্যাজ :: গেটমোডেল (..)" ব্যবহার করছিল, এটি ম্যাজেন্টো ২ তে পরিবর্তিত হয়েছে। এখন ম্যাজেন্টো একটি অবজেক্ট ম্যানেজারকে আপত্তিগুলি ইনস্ট্যান্ট করতে ব্যবহার করে, এটি কীভাবে কাজ করে সে সম্পর্কে আমি বিশদটি লিখব না .. সুতরাং, ম্যাজেন্টো 2 তে গ্রাহক তৈরির জন্য সমতুল্য কোডটি দেখতে এটিরকম হবে:

<?php

namespace ModuleNamespace\Module_Name\Controller\Index;

class Index extends \Magento\Framework\App\Action\Action
{
    /**
     * @var \Magento\Store\Model\StoreManagerInterface
     */
    protected $storeManager;

    /**
     * @var \Magento\Customer\Model\CustomerFactory
     */
    protected $customerFactory;

    /**
     * @param \Magento\Framework\App\Action\Context      $context
     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
     * @param \Magento\Customer\Model\CustomerFactory    $customerFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Customer\Model\CustomerFactory $customerFactory
    ) {
        $this->storeManager     = $storeManager;
        $this->customerFactory  = $customerFactory;

        parent::__construct($context);
    }

    public function execute()
    {
        // Get Website ID
        $websiteId  = $this->storeManager->getWebsite()->getWebsiteId();

        // Instantiate object (this is the most important part)
        $customer   = $this->customerFactory->create();
        $customer->setWebsiteId($websiteId);

        // Preparing data for new customer
        $customer->setEmail("email@domain.com"); 
        $customer->setFirstname("First Name");
        $customer->setLastname("Last name");
        $customer->setPassword("password");

        // Save data
        $customer->save();
        $customer->sendNewAccountEmail();
    }
}

আশা করি কোডের এই স্নিপেটটি অন্য কাউকে সহায়তা করবে ..


6
আপনি খুব কাছের ছিল। যখনই সম্ভব আপনার অবজেক্ট ম্যানেজারটি সরাসরি এড়ানো উচিত - এটি খারাপ ফর্ম। এটি করার সঠিক উপায় হ'ল 'ফ্যাক্টরি' শ্রেণি পেতে নির্ভরতা ইনজেকশন ব্যবহার করা এবং একটি উদাহরণ তৈরি করতে এটি ব্যবহার করুন। যদি কোনও প্রদত্ত শ্রেণীর জন্য কারখানার শ্রেণি বিদ্যমান না থাকে তবে এটি স্বয়ংক্রিয়ভাবে উত্পন্ন হবে। আমি এটি ব্যবহার করতে আপনার কোড সম্পাদনা করেছি (নির্মাণকারীর এবং শ্রেণিতে ফ্যাক্টরি যুক্ত করেছি, এবং কল করুন () তৈরি করুন, এবং পিএসআর -2 কোড মান অনুসরণ করুন।
রায়ান হোয়ের

সংশোধন @ রায়ানএইচ এর জন্য ধন্যবাদ। আমি কারখানার ক্লাসগুলি ব্যবহার করার বিষয়ে ভেবেছিলাম কিন্তু কীভাবে করব তা নিশ্চিত ছিলাম না, তাই আমি অবজেক্ট ম্যানেজারটি ব্যবহার করেছি ... আমি ভবিষ্যতের প্রকল্পগুলির জন্য পিএসআর -২ কোড মান সম্পর্কে আরও পড়ব। আমি এখন আপনার সংশোধন সহ কোডটি ব্যবহার করছি এবং সবকিছুই নিখুঁতভাবে কাজ করে। ধন্যবাদ
এডুয়ার্ডো

@RyanH। সম্পন্ন ; )
এডুয়ার্ডো

আমি এটি ডাটাবেসে দেখতে পাচ্ছি তবে অ্যাডমিন প্যানেলের জন্য নয়। কি ঘটছে?
আরনি

1
@Arni; আমার প্রথম অনুমানটি হ'ল আপনাকে পুনর্নির্দেশের দরকার হবে :)
অ্যালেক্স

4

ডিফল্ট গ্রুপ এবং বর্তমান স্টোর সহ একটি নতুন গ্রাহক তৈরি করার সহজ উপায় এখানে।

use Magento\Framework\App\RequestFactory;
use Magento\Customer\Model\CustomerExtractor;
use Magento\Customer\Api\AccountManagementInterface;

class CreateCustomer extends \Magento\Framework\App\Action\Action
{
    /**
     * @var RequestFactory
     */
    protected $requestFactory;

    /**
     * @var CustomerExtractor
     */
    protected $customerExtractor;

    /**
     * @var AccountManagementInterface
     */
    protected $customerAccountManagement;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param RequestFactory $requestFactory
     * @param CustomerExtractor $customerExtractor
     * @param AccountManagementInterface $customerAccountManagement
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        RequestFactory $requestFactory,
        CustomerExtractor $customerExtractor,
        AccountManagementInterface $customerAccountManagement
    ) {
        $this->requestFactory = $requestFactory;
        $this->customerExtractor = $customerExtractor;
        $this->customerAccountManagement = $customerAccountManagement;
        parent::__construct($context);
    }

    /**
     * Retrieve sources
     *
     * @return array
     */
    public function execute()
    {
        $customerData = [
            'firstname' => 'First Name',
            'lastname' => 'Last Name',
            'email' => 'customer@email.com',
        ];

        $password = 'MyPass123'; //set null to auto-generate

        $request = $this->requestFactory->create();
        $request->setParams($customerData);

        try {
            $customer = $this->customerExtractor->extract('customer_account_create', $request);
            $customer = $this->customerAccountManagement->createAccount($customer, $password);
        } catch (\Exception $e) {
            //exception logic
        }
    }
}

এখানে অনুরোধ কী ?, আমরা কাস্টম বৈশিষ্ট্যগুলিও যুক্ত করতে পারি?
জাফর পিনজার

কাস্টম বৈশিষ্ট্যগুলি কীভাবে সেট করবেন?
জাফর পিনজার

0

এই কোডটি বহিরাগত ফাইল বা কনসোল ফাইল CLI Magento মধ্যে চালিত

namespace Company\Module\Console;

use Braintree\Exception;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Magento\Framework\App\Bootstrap;


class ImportProducts extends Command
{

    public function magentoStart()
    {
        $startMagento = $this->bootstrap();
        $state = $startMagento['objectManager']->get('Magento\Framework\App\State');
        $state->setAreaCode('frontend');
        return $startMagento['objectManager'];
    }

    protected function bootstrap()
    {
        require '/var/www/html/app/bootstrap.php';
        $bootstrap = Bootstrap::create(BP, $_SERVER);
        $objectManager = $bootstrap->getObjectManager();
        return array('bootstrap' => $bootstrap, 'objectManager' => $objectManager);
    }

    protected function createCustomers($item)
    {
        $objectManager      = $this->magentoStart();
        $storeManager       = $objectManager->create('Magento\Store\Model\StoreManagerInterface');
        $customerFactory    = $objectManager->create('Magento\Customer\Model\CustomerFactory');

        $websiteId  = $storeManager->getWebsite()->getWebsiteId();
        $customer   = $customerFactory->create();
        $customer->setWebsiteId($websiteId);
        $customer->setEmail("eu@mailinator.com");
        $customer->setFirstname("First Name");
        $customer->setLastname("Last name");
        $customer->setPassword("password");
        $customer->save();
    }
}

0

উপরের সমস্ত উদাহরণগুলি কাজ করবে তবে মানক উপায়টি সর্বদা কংক্রিটের ক্লাসগুলির চেয়ে পরিষেবা চুক্তির ব্যবহার হওয়া উচিত ।

অতএব, প্রোগ্রামক্রমেটিকভাবে গ্রাহক তৈরি করার জন্য নীচের উপায়গুলি পছন্দ করা উচিত।

                /** @var \Magento\Customer\Api\Data\CustomerInterface $customer */
                $customer = $this->customerFactory->create();
                $customer->setStoreId($store->getStoreId());
                $customer->setWebsiteId($store->getWebsiteId());
                $customer->setEmail($email);
                $customer->setFirstname($firstName);
                $customer->setLastname($lastName);

                /** @var \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository*/
                $customerRepository->save($customer);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.