Respuestas:
Creo que lo ha hecho en su controlador, es posible que deba inicializar el administrador de objetos mediante el uso de la clase de contexto en el método __construct.
Si necesita el ID de categoría en Magento2, puede obtener los valores utilizando los siguientes pasos a seguir
1.Incluya el uso Magento\Framework\Registry
en su archivo de clase.
<?php
/**
* class file
*/
namespace Vendor\Module\Model;
use Magento\Framework\Registry;
...
2.Cree un objeto para eso usando Object Manager o si lo está usando en el controlador, entonces asigne en su __construct()
función como \Magento\Framework\Registry $registry
:
...
/**
* @var Registry
*/
class BlueLine
{
...
private $registry;
...
public function __construct(Registry $registry)
{
$this->registry = $registry;
}
...
3. Luego, simplemente puede usarlo con la clase como:
$category = $this->registry->registry('current_category');
echo $category->getId();
Para obtener más información sobre la implementación en Magento2 de este concepto, consulte el archivo de clase y la función denominada función pública _initCategory()
. En este método están registrando la categoría actual.
Prueba este código. esto definitivamente te ayudará.
<?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();
?>
Lo anterior parece correcto, pero creo que saltar directamente al Registro no es el mejor enfoque. Magento ofrece un Layer Resolver que ya encapsula esa funcionalidad. (Consulte el bloque TopMenu en los complementos del catálogo)
Sugiero inyectar la clase \ Magento \ Catalog \ Model \ Layer \ Resolver y usarla para obtener la categoría actual. Aquí está el 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();
}
}
Esto es lo que hace el método getCurrentCategory () real en la clase 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 puede ver, todavía usa el registro, pero proporciona un respaldo en caso de que falle.