Jawaban:
Saya pikir Anda telah melakukan di controller Anda mungkin Anda harus mendapatkan manajer objek yang akan diinisialisasi dengan menggunakan kelas konteks dalam metode __construct.
Jika Anda membutuhkan ID kategori di Magento2, maka Anda bisa mendapatkan nilai menggunakan langkah-langkah berikut untuk diikuti
1. Sertakan penggunaan Magento\Framework\Registry
dalam file kelas Anda.
<?php
/**
* class file
*/
namespace Vendor\Module\Model;
use Magento\Framework\Registry;
...
2. Buat objek untuk itu menggunakan objek Manager atau jika Anda menggunakannya di controller kemudian menetapkan dalam __construct()
fungsi Anda sebagai \Magento\Framework\Registry $registry
:
...
/**
* @var Registry
*/
class BlueLine
{
...
private $registry;
...
public function __construct(Registry $registry)
{
$this->registry = $registry;
}
...
3. Kemudian Anda cukup menggunakannya dengan kelas sebagai:
$category = $this->registry->registry('current_category');
echo $category->getId();
Untuk Referensi lebih lanjut dalam Magento2 Implementasi konsep ini merujuk file kelas dan fungsi yang disebut fungsi publik _initCategory()
. Dalam metode ini mereka mendaftarkan kategori saat ini.
Coba kode ini. ini pasti akan membantu Anda.
<?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();
?>
Di atas kelihatannya benar, tetapi saya berpikir bahwa melompat langsung ke Registry bukanlah pendekatan terbaik. Magento menyediakan Layer Resolver yang telah merangkum fungsionalitas itu. (Lihat Blok TopMenu di Plugin Katalog)
Saya sarankan menyuntikkan kelas \ Magento \ Catalog \ Model \ Layer \ Resolver dan menggunakannya untuk mendapatkan kategori saat ini. Ini kodenya:
<?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();
}
}
Inilah yang dilakukan oleh metode getCurrentCategory () di kelas 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;
}
Seperti yang Anda lihat, itu masih menggunakan registri tetapi memberikan cadangan jika gagal.