Risposte:
Penso che tu abbia fatto nel tuo controller potrebbe essere che dovresti far inizializzare il gestore oggetti usando la classe di contesto nel metodo __construct.
Se hai bisogno dell'ID categoria in Magento2, puoi ottenere i valori usando i seguenti passi da seguire
1. Includi l'uso Magento\Framework\Registry
nel tuo file di classe.
<?php
/**
* class file
*/
namespace Vendor\Module\Model;
use Magento\Framework\Registry;
...
2. Creare un oggetto per quello utilizzando Gestione oggetti oppure se lo si utilizza nel controller, assegnare nella __construct()
funzione come \Magento\Framework\Registry $registry
:
...
/**
* @var Registry
*/
class BlueLine
{
...
private $registry;
...
public function __construct(Registry $registry)
{
$this->registry = $registry;
}
...
3. Quindi puoi semplicemente usarlo con la classe come:
$category = $this->registry->registry('current_category');
echo $category->getId();
Per ulteriori riferimenti in Magento2 L'implementazione di questo concetto si riferisce al file di classe e alla funzione chiamata funzione pubblica _initCategory()
. In questo metodo stanno registrando la categoria corrente.
Prova questo codice. questo ti aiuterà sicuramente.
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');//get current category
echo $category->getId();
echo $category->getName();
?>
Quanto sopra sembra corretto, ma penso che saltare direttamente al registro non sia l'approccio migliore. Magento fornisce un resolver di livelli che già incapsula quella funzionalità. (Vedi il blocco TopMenu nel plugin del catalogo)
Suggerisco di iniettare la classe \ Magento \ Catalog \ Model \ Layer \ Resolver e di usarla per ottenere la categoria corrente. Ecco il codice:
<?php
namespace FooBar\Demo\Block;
class Demo extends \Magento\Framework\View\Element\Template
{
private $layerResolver;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Catalog\Model\Layer\Resolver $layerResolver,
array $data = []
) {
parent::__construct($context, $data);
$this->layerResolver = $layerResolver;
}
public function getCurrentCategory()
{
return $this->layerResolver->get()->getCurrentCategory();
}
public function getCurrentCategoryId()
{
return $this->getCurrentCategory()->getId();
}
}
Ecco cosa fa l'attuale metodo getCurrentCategory () nella classe Resolver.
public function getCurrentCategory()
{
$category = $this->getData('current_category');
if ($category === null) {
$category = $this->registry->registry('current_category');
if ($category) {
$this->setData('current_category', $category);
} else {
$category = $this->categoryRepository->get($this->getCurrentStore()->getRootCategoryId());
$this->setData('current_category', $category);
}
}
return $category;
}
Come puoi vedere, utilizza ancora il registro ma fornisce un fallback in caso di errore.