In der Tat können Sie Produkte im Frontend-Bereich nicht löschen.
Sie müssen die SecureArea-Registrierung erzwingen.
Wenn Sie jedoch die register
Funktion überprüfen , sehen Sie, dass Sie einen vorhandenen Schlüsselwert nicht überschreiben können. Sie müssen die Registrierung des Schlüssels aufheben, bevor Sie ihn registrieren können.
/**
* Register a new variable
*
* @param string $key
* @param mixed $value
* @param bool $graceful
* @return void
* @throws \RuntimeException
*/
public function register($key, $value, $graceful = false)
{
if (isset($this->_registry[$key])) {
if ($graceful) {
return;
}
throw new \RuntimeException('Registry key "' . $key . '" already exists');
}
$this->_registry[$key] = $value;
}
Lösung basierend auf anderen Beiträgen:
Konstrukteur :
public function __construct(
........
\Magento\Catalog\Model\ProductRepository $productRepository,
\Magento\Framework\Registry $registry
) {
......
$this->productRepository = $productRepository;
$this->registry = $registry;
}
Logik :
$this->registry->unregister('isSecureArea');
$this->registry->register('isSecureArea', true);
// using sku
$this->productRepository->deleteById('Z62676');
// using product id
$product = $this->productRepository->getById(1);
$this->productRepository->delete($product);