In this tutorial I will explain how to create product from CLI.
Declare the module
File: app/code/PHPCodez/Product/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_Product" setup_version="0.0.1"/> </config>
Register the Module
File: app/code/PHPCodez/Product/registration.php
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'PHPCodez_Product', __DIR__ );
Define command in di.xml
In di.xml file, you can use a type with name Magento\Framework\Console\CommandList to define the command option.
File: app/code/PHPCodez/First/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="createProduct" xsi:type="object">PHPCodez\Product\Console\CreateProductCommand</item> </argument> </arguments> </type> </config>
Create command class
As define in di.xml, we will create a command class:
File: app/code/PHPCodez/Product/Console/CreateProductCommand.php
<?php
namespace PHPCodez\Product\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\Product\Helper\Product;
class CreateProductCommand extends Command
{
protected $productHelper;
public function __construct(Product $productHelper)
{
$this->productHelper = $productHelper;
parent::__construct();
}
protected function configure()
{
$this ->setName('phpcodez:product:create')
->setDescription('Create new products')
->setDefinition($this->getOptionsList());
}
protected function execute(InputInterface $input, OutputInterface $output) {
$output->writeln('<info>Creating Products</info>');
$this->productHelper->setData($input);
$this->productHelper->execute();
$output->writeln('<info>Product is created.</info>');
}
protected function getOptionsList()
{
return [
new InputOption(product::ARG_COUNT, null, InputOption::VALUE_REQUIRED, '(Required) Count is required'),
new InputOption(product::ARG_WEBSITE, null, InputOption::VALUE_REQUIRED, '(Required) Website ID')
];
}
}
Create helper class
<?php
namespace PHPCodez\Product\Helper;
use \Magento\Framework\App\Helper\Context;
use \Magento\Store\Model\StoreManagerInterface;
use \Magento\Framework\App\State;
use \Symfony\Component\Console\Input\Input;
use \Magento\Catalog\Model\ProductFactory;
class Product extends \Magento\Framework\App\Helper\AbstractHelper
{
const ARG_COUNT = 'count';
const ARG_WEBSITE = 'website';
protected $storeManager;
protected $state;
protected $ProductFactory;
protected $data;
public function __construct(
Context $context,
StoreManagerInterface $storeManager,
State $state,
ProductFactory $productFactory
) {
$this->storeManager = $storeManager;
$this->state = $state;
$this->productFactory = $productFactory;
parent::__construct($context);
}
public function setData(Input $input)
{
$this->data = $input;
return $this;
}
public function createProduct($count){
$website = $this->data->getOption(self::ARG_WEBSITE)?$this->data->getOption(self::ARG_WEBSITE):1;
$product = $this->productFactory->create();
$productSKU = time().$count;
$product->setSku($productSKU);
$product->setUrlKey($productSKU);
$product->setName('PHPCodez Simple Product - '. date('dmy-his'));
$product->setAttributeSetId(4);
$product->setStatus(1);
$product->setWeight(10);
$product->setVisibility(4);
$product->setTaxClassId(0);
$product->setTypeId('simple'); // type of product (simple/virtual/downloadable/configurable)
$product->setPrice(100);
$product->setWebsiteIds(array(1)); // website ID
$product->setCategoryIds(array(3,4));
$product->setStockData(
array(
'use_config_manage_stock' => 0,
'manage_stock' => 1,
'is_in_stock' => 1,
'qty' => 999
)
);
//echo $dir = $objectManager->get('Magento\Framework\App\Filesystem\DirectoryList');
//die;
$imagePath = "phpcodez.jpg"; // path of the image
$product->addImageToMediaGallery($imagePath, array('image', 'small_image', 'thumbnail'), false, false);
$product->save();
return $productSKU;
}
public function execute() {
$this->state->setAreaCode('frontend');
$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++){
$productSKU = $this->createProduct($i);
echo $i."- Product is created - SKU : ".$productSKU."\n";
}
}
}
Issue the following commands and you will be able to see shipping method ‘PHPCodez Easy Shipping’ on checkout page.
php bin/magento setup:upgrade php bin/magento setup:static-content:deploy -f php bin/magento cache:clean
Now you can create products by running the following command. Max count can be 100 at a time.
php bin/magento phpcodez:product:create --count=5