Here I am creating a module PHPCodez_Customers that will help us to create customers from commandline.
Create folders for the modul app/code/PHPCodez/Customers
Declare the module – Create module.xml
File : app/code/PHPCodez/Customers/etc/module.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd"> <module name="PHPCodez_Customer" setup_version="0.0.1"/> </config>
Register the module – Create registration.php
File : app/code/PHPCodez/Customers/registration.php
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'PHPCodez_Customer', __DIR__ );
Add new command – Create di.xml file
File : app/code/PHPCodez/Customers/etc/di.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Framework\Console\CommandList"> <arguments> <argument name="commands" xsi:type="array"> <item name="createPHPCodezCustomers" xsi:type="object">PHPCodez\Customer\Console\CustomerCreateCommand</item> <item name="createPHPCodezMultipleCustomers" xsi:type="object">PHPCodez\Customer\Console\CreateMutipleCustomersCommand</item> </argument> </arguments> </type> </config>
Here I am adding two new command one for single customer account creation phpcodez:customers:create and another one for mutiple customer account cretaion phpcodez:customers:account:create
Create class for the the command phpcodez:customers:account:create
File : app/code/PHPCodez/Customers/Console/CreateMutipleCustomersCommand.php
<?php
namespace PHPCodez\Customer\Console;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use PHPCodez\Customer\Helper\Customer;
class CreateMutipleCustomersCommand extends Command
{
protected $customerHelper;
public function __construct(Customer $customerHelper)
{
$this->customerHelper = $customerHelper;
parent::__construct();
}
protected function configure()
{
$this ->setName('phpcodez:customers:account:create')
->setDescription('Create new customer')
->setDefinition($this->getOptionsList());
}
protected function execute(InputInterface $input, OutputInterface $output) {
$output->writeln('<info>Creating customers account</info>');
$this->customerHelper->setData($input);
$this->customerHelper->createMultipleCustomerAccount();
}
protected function getOptionsList()
{
return [
new InputOption(Customer::ARG_COUNT, null, InputOption::VALUE_REQUIRED, '(Required) Count is required'),
new InputOption(Customer::ARG_WEBSITE, null, InputOption::VALUE_REQUIRED, '(Required) Website ID')
];
}
}
Create class for the the command phpcodez:customers:create
File : app/code/PHPCodez/Customers/Console/CustomerCreateCommand.php
<?php
namespace PHPCodez\Customer\Console;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use PHPCodez\Customer\Helper\Customer;
class CustomerCreateCommand extends Command
{
protected $customerHelper;
public function __construct(Customer $customerHelper)
{
$this->customerHelper = $customerHelper;
parent::__construct();
}
protected function configure()
{
$this ->setName('phpcodez:customers:create')
->setDescription('Create new customer')
->setDefinition($this->getOptionsList());
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln('<info>Creating new user...</info>');
$this->customerHelper->setData($input);
$this->customerHelper->execute();
$output->writeln('');
$output->writeln('<info>User created with the following data:</info>');
$output->writeln('');
$output->writeln('<comment>Customer ID: ' . $this->customerHelper->getCustomerId());
$output->writeln('<comment>Customer Website ID ' . $input->getOption(Customer::ARG_WEBSITE));
$output->writeln('<comment>Customer First Name: ' . $input->getOption(Customer::ARG_FIRSTNAME));
$output->writeln('<comment>Customer Last Name: ' . $input->getOption(Customer::ARG_LASTNAME));
$output->writeln('<comment>Customer Email: ' . $input->getOption(Customer::ARG_EMAIL));
$output->writeln('<comment>Customer Password: ' . $input->getOption(Customer::ARG_PASSWORD));
$output->writeln('');
}
protected function getOptionsList()
{
return [
new InputOption(Customer::ARG_FIRSTNAME, null, InputOption::VALUE_REQUIRED, '(Required) Customer first name'),
new InputOption(Customer::ARG_LASTNAME, null, InputOption::VALUE_REQUIRED, '(Required) Customer last name'),
new InputOption(Customer::ARG_EMAIL, null, InputOption::VALUE_REQUIRED, '(Required) Customer email'),
new InputOption(Customer::ARG_PASSWORD, null, InputOption::VALUE_REQUIRED, '(Required) Customer password'),
new InputOption(Customer::ARG_WEBSITE, null, InputOption::VALUE_REQUIRED, '(Required) Website ID'),
new InputOption(Customer::ARG_SENDEMAIL, 0, InputOption::VALUE_OPTIONAL, '(1/0) Send email? (default 0)')
];
}
}
Create helper for account creation.
File : app/code/PHPCodez/Customers/Helper/Customer.php
<?php
namespace PHPCodez\Customer\Helper;
use \Magento\Framework\App\Helper\Context;
use \Magento\Store\Model\StoreManagerInterface;
use \Magento\Framework\App\State;
use \Magento\Customer\Model\CustomerFactory;
use \Symfony\Component\Console\Input\Input;
class Customer extends \Magento\Framework\App\Helper\AbstractHelper
{
const ARG_COUNT = 'count';
const ARG_EMAIL = 'email';
const ARG_FIRSTNAME = 'firstname';
const ARG_LASTNAME = 'lastname';
const ARG_PASSWORD = 'password';
const ARG_WEBSITE = 'website';
const ARG_SENDEMAIL = 'send-email';
protected $storeManager;
protected $state;
protected $customerFactory;
protected $data;
protected $customerId;
public function __construct(
Context $context,
StoreManagerInterface $storeManager,
State $state,
CustomerFactory $customerFactory
) {
$this->storeManager = $storeManager;
$this->state = $state;
$this->customerFactory = $customerFactory;
parent::__construct($context);
}
public function setData(Input $input)
{
$this->data = $input;
return $this;
}
public function createMultipleCustomerAccount(){
$this->state->setAreaCode('frontend');
$customer = $this->customerFactory->create();
$website = $this->data->getOption(self::ARG_WEBSITE)?$this->data->getOption(self::ARG_WEBSITE):1;
$count = $this->data->getOption(self::ARG_COUNT)?$this->data->getOption(self::ARG_COUNT):1;
$count = $count > 100? 100:$count;
for($i =1;$i<=$count;$i++){
$customerEmail = 'Test.User'.time().'@phpcodez.com';
$customerFirstName = "PHP";
$customerLastName = "Codez";
$customerPassword = "phpcodez";
$customer
->setWebsiteId($website)
->setEmail($customerEmail)
->setFirstname($customerFirstName)
->setLastname($customerLastName)
->setPassword($customerPassword);
$customer->save();
echo $i.". Account is created for ".$customerEmail."\n";
}
}
public function execute() {
$this->state->setAreaCode('frontend');
$customer = $this->customerFactory->create();
$customer
->setWebsiteId($this->data->getOption(self::ARG_WEBSITE))
->setEmail($this->data->getOption(self::ARG_EMAIL))
->setFirstname($this->data->getOption(self::ARG_FIRSTNAME))
->setLastname($this->data->getOption(self::ARG_LASTNAME))
->setPassword($this->data->getOption(self::ARG_PASSWORD));
$customer->save();
$this->customerId = $customer->getId();
if($this->data->getOption(self::ARG_SENDEMAIL)) {
$customer->sendNewAccountEmail();
}
}
public function getCustomerId()
{
return (int)$this->customerId;
}
}
Install the module.
php bin/magento setup:upgrade php bin/magento setup:static-content:deploy -f php bin/magento cache:clean
Issue the following command to create single account
php bin/magento phpcodez:customer:create --firstname="PHP" --lastname="Codez" --email="PHPCodez@gmail.com" --password="phpcodez17" --website="1"
Issue the following command to create multiple accounts(Max is 100)
php bin/magento phpcodez:customers:account:create