Magento 2는 레지스트리를 사용하여 현재 카테고리 ID를 얻습니다.


답변:


0

컨트롤러에서 __construct 메소드의 컨텍스트 클래스를 사용하여 객체 관리자를 초기화해야한다고 생각했을 것입니다.


안녕 내 블록 클래스 파일에서 이미 construct 메소드를 호출 자세한 내용은 아래의 링크를 확인하십시오 codebeautify.org/alleditor/0b796a 그리고 도움을 주셔서 감사합니다.
Pratik

이것은 정답이 아니어야합니다. 설명 된 방식으로 Objectmanager를 사용해서는 안됩니다.
seanbreeden

22

Magento2에서 카테고리 ID가 필요한 경우 다음 단계에 따라 값을 얻을 수 있습니다.

1. Magento\Framework\Registry수업 파일에 사용 을 포함시킵니다.

<?php
/**
 * class file
 */

namespace Vendor\Module\Model;

use Magento\Framework\Registry;

...

2. Object Manager를 사용하여 객체를 생성하거나 컨트롤러에서 객체를 사용하는 경우 __construct()함수 에서 다음과 같이 할당하십시오 \Magento\Framework\Registry $registry.

...

/**
 * @var Registry
 */

class BlueLine
{
    ...
    private $registry;
    ...

    public function __construct(Registry $registry) 
    {
        $this->registry = $registry;
    }

    ...

3. 클래스에서 다음과 같이 간단히 사용할 수 있습니다.

$category = $this->registry->registry('current_category');

echo $category->getId();

이 개념의 Magento2 구현에 대한 추가 참조는 public function이라는 클래스 파일과 함수를 참조하십시오 _initCategory(). 이 방법에서는 현재 카테고리를 등록합니다.


안녕하세요 단계를 수행하고 결과를 확인하십시오. 요청을 처리하는 동안 오류가 발생했습니다. Object DOMDocument를 만들어야합니다.
Pratik

귀하의 사유 재산이 잘못되었습니다.
LM_Fielding

10

이 코드를 사용해보십시오. 이것은 확실히 당신을 도울 것입니다.

<?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();
?>

4
그런 코드에서 객체 관리자를 사용해서는 안됩니다. devdocs.magento.com/guides/v2.0/extension-dev-guide/…
drew7721

3

위의 내용은 정확하지만 레지스트리로 바로 점프하는 것이 가장 좋은 방법은 아니라고 생각합니다. Magento는 해당 기능을 이미 캡슐화 한 Layer Resolver를 제공합니다. (카탈로그 플러그인의 TopMenu 블록 참조)

\ Magento \ Catalog \ Model \ Layer \ Resolver 클래스를 주입하고이를 사용하여 현재 범주를 가져 오는 것이 좋습니다. 코드는 다음과 같습니다.

<?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();
    }
}

리졸버 클래스에서 실제 getCurrentCategory () 메소드의 기능은 다음과 같습니다 .

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;
}

보다시피 레지스트리는 여전히 레지스트리를 사용하지만 실패 할 경우 폴백을 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.