Saya ingin membuat perintah untuk menghapus operasi untuk produk sederhana oleh sku. Saya mendapatkan error.how untuk mengatur area admin?
[Magento \ Framework \ Exception \ LocalizedException]
Operasi penghapusan dilarang untuk area saat ini
<?php
namespace Sivakumar\Sample\Console;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputOption;
class DeleteSimpleProduct extends Command
{
protected $_product;
public function __construct(\Magento\Catalog\Model\Product $_product)
{
$this->_product =$_product;
parent::__construct();
}
/**
* {@inheritdoc}
*/
protected function configure()
{
$this->setName('delete_simple_product')
->setDescription('Delete Simple Product')
->setDefinition($this->getOptionsList());
parent::configure();
}
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$errors = $this->validate($input);
if ($errors) {
throw new \InvalidArgumentException(implode("\n", $errors));
}
$product_id = $this->_product->getIdBySku($input->getOption('sku'));
$product=$this->_product->load($product_id);
$product->delete();
$output->writeln('<info>product deleted ' . $input->getOption('sku') . '</info>');
}
public function getOptionsList()
{
return [
new InputOption('sku', null, InputOption::VALUE_REQUIRED, 'SKU'),
];
}
public function validate(InputInterface $input)
{
$errors = [];
$required =['sku',];
foreach ($required as $key) {
if (!$input->getOption($key)) {
$errors[] = 'Missing option ' . $key;
}
}
return $errors;
}
}
di.xml
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<type name="Magento\Framework\Console\CommandList">
<arguments>
<argument name="commands" xsi:type="array">
<item name="delete_simple_product" xsi:type="object">Sivakumar\Sample\Console\DeleteSimpleProduct</item>
</argument>
</arguments>
</type>
</config>
sumber
https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Api/ProductRepositoryInterface.php
karena ini adalah API publik dan karenanya lebih stabil.Baru-baru ini saya mengalami masalah ini saat menulis perintah konsol untuk menghapus kategori kosong.
Seperti yang dikatakan dalam jawaban lain Anda harus mendaftar
'isSecureArea'
ke true.Untuk melakukan ini dalam perintah konsol Anda harus memiliki kelas Magento \ Framework \ Registry masuk ke konstruktor Anda.
Dalam kasus saya, saya melakukannya dengan cara ini:
dan kemudian dalam
execute
metode saya menggunakan repositori untuk melakukan penghapusan yang sebenarnya:$this->_categoryRepository->deleteByIdentifier($category->getId());
sumber
jika Anda menggunakan skrip, buat objek registri seperti yang ditunjukkan di bawah ini.
Silakan klik di sini untuk penjelasan terperinci. http://www.pearlbells.co.uk/mass-delete-magento-2-categories-programmatically/
jika ini adalah skrip satu kali, Anda dapat menggunakan OM
sumber
Memperluas jawaban Chris O'Toole. Saya juga perlu menghapus kategori dari suatu perintah, sebenarnya dari banyak perintah. Awalnya hanya memiliki
dalam satu perintah bekerja dengan baik, tetapi ketika saya meletakkannya di beberapa perintah (dalam konstruktor) saya mendapatkan kesalahan ini selama kompilasi
Pertama memeriksa keberadaan kunci registri menyelesaikannya
Saya tidak yakin apakah itu bentuk yang buruk untuk meletakkannya di konstruktor, tetapi anggap itu sebabnya kesalahan itu ditemukan. Sebagai alternatif, Anda harus dapat melarikan diri dengan menjalankan cuplikan pertama dari
execute
metode perintah Anda . Sekali lagi, saya tidak yakin apa yang dianggap praktik terbaik ...sumber
Untuk operasi dengan produk, Anda harus menggunakan Repositori.
sumber
Alih-alih mengatur isSecureArea Anda juga dapat mengizinkan untuk menghapus satu jenis objek dengan menimpa
RemoveAction
argumen jenis di Andadi.xml
seperti ini:sumber