Réponses:
Je pense que vous l'avez fait dans votre contrôleur, vous devriez peut-être initialiser le gestionnaire d'objets en utilisant la classe de contexte dans la méthode __construct.
Si vous avez besoin de l'ID de catégorie dans Magento2, vous pouvez obtenir les valeurs en suivant les étapes suivantes à suivre
1.Incluez l'utilisation Magento\Framework\Registry
dans votre fichier de classe.
<?php
/**
* class file
*/
namespace Vendor\Module\Model;
use Magento\Framework\Registry;
...
2.Créez un objet pour cela en utilisant le gestionnaire d'objets ou si vous l'utilisez dans le contrôleur, affectez-le dans votre __construct()
fonction en tant que \Magento\Framework\Registry $registry
:
...
/**
* @var Registry
*/
class BlueLine
{
...
private $registry;
...
public function __construct(Registry $registry)
{
$this->registry = $registry;
}
...
3. Ensuite, vous pouvez simplement l'utiliser avec la classe comme:
$category = $this->registry->registry('current_category');
echo $category->getId();
Pour la référence supplémentaire dans la mise en œuvre de Magento2 de ce concept, reportez-vous au fichier de classe et à la fonction appelée fonction publique _initCategory()
. Dans cette méthode, ils enregistrent la catégorie actuelle.
Essayez ce code. cela vous aidera certainement.
<?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();
?>
Ce qui précède semble correct, mais je pense que sauter directement au Registre n'est pas la meilleure approche. Magento fournit un résolveur de calque qui encapsule déjà cette fonctionnalité. (Voir le bloc TopMenu dans les plugins du catalogue)
Je suggère d'injecter la classe \ Magento \ Catalog \ Model \ Layer \ Resolver et de l'utiliser pour obtenir la catégorie actuelle. Voici le code:
<?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();
}
}
Voici ce que fait la méthode getCurrentCategory () dans la 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;
}
Comme vous pouvez le voir, il utilise toujours le registre mais il fournit une solution de secours en cas d'échec.