Respostas:
Eu acho que você fez no seu controlador pode ser que você deve obter o gerenciador de objetos a ser inicializado usando a classe de contexto no método __construct.
Se você precisar do ID da categoria no Magento2, poderá obter os valores usando as seguintes etapas a serem seguidas
1. Inclua o uso Magento\Framework\Registry
no seu arquivo de classe.
<?php
/**
* class file
*/
namespace Vendor\Module\Model;
use Magento\Framework\Registry;
...
2.Crie um objeto para isso usando o Gerenciador de objetos ou, se você o estiver usando no controlador, atribua na sua __construct()
função como \Magento\Framework\Registry $registry
:
...
/**
* @var Registry
*/
class BlueLine
{
...
private $registry;
...
public function __construct(Registry $registry)
{
$this->registry = $registry;
}
...
3.Em seguida, você pode simplesmente usá-lo com a classe como:
$category = $this->registry->registry('current_category');
echo $category->getId();
Para referência adicional na implementação do Magento2 deste conceito, consulte o arquivo de classe e a função chamada função pública _initCategory()
. Nesse método, eles estão registrando a categoria atual.
Experimente este código. isso definitivamente irá ajudá-lo.
<?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();
?>
O texto acima parece correto, mas acho que pular direto para o Registro não é a melhor abordagem. O Magento fornece um resolvedor de camadas que já encapsula essa funcionalidade. (Veja o bloco TopMenu nos plugins do catálogo)
Sugiro injetar a classe \ Magento \ Catalog \ Model \ Layer \ Resolver e usá-la para obter a categoria atual. Aqui está o código:
<?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();
}
}
Aqui está o que o método getCurrentCategory () real faz na 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;
}
Como você pode ver, ele ainda usa o registro, mas fornece um fallback no caso de falha.