마 젠토 2 : 헬퍼의 올바른 사용


9

템플릿 파일에서 다음을 사용할 수 있도록 헬퍼 클래스를 선언하는 사람들이 점점 더 많아지고 있습니다.

$this->helper('Path/To/Helper/Class')->customMethod();

이런 종류의 코드는 사람들 이 객체 관리자를 직접 제한 하지 않는 것을 피할 수있게 하지만 그 도우미에서 차단 코드가되어야하는 코드를 보는 경향이 있습니다.

내 질문은 다음과 같습니다.

  • 헬퍼 클래스에서 무엇을 써야합니까?
  • 어떤 경우 템플릿에서 도우미 메서드를 사용하는 것이 관련이 있습니까?

답변:


20

하지마
이것은 ObjectManager::getInstance()->create()템플릿에서 사용 하는 것과 같습니다 !
대신 도우미를 생성자 종속성으로받는 사용자 지정 블록을 사용하고 도우미 메서드를 호출하는 프록시 메서드를 추가하십시오.

템플릿에서 :

$block->customMethod()

블록에서 :

public function __construct(Path/To/Helper/Class $helperClass, ...other dependencies...)
{
    $this->helper = $helperClass;
    // ...other assignments and call to parent::__construct()
}

public function customMethod()
{
    return $this->helper->customMethod();
}

OOP 원칙에서 이것은 "계량법"을 위반하지 않도록합니다. 템플릿 대신 비즈니스 로직을 블록으로 캡슐화합니다. 부작용으로 로직이 블록으로 이동함에 따라 로직을 더욱 테스트 할 수 있습니다.

헬퍼 클래스에 어떤 로직을 넣었는지에 관해서는 Magento 2 헬퍼에서 대부분 모델이 아닌 것과 같은 서비스에 적합하지만 가격 형식과 같은 재사용 가능한 코드가 포함되어 있음을 알았습니다. 더 좋은 예를 지금 생각하지 마십시오).


나는 원칙에 동의하지만 di.xml블록 클래스 유형에 기본 설정을 사용하는 것처럼 보이지만 일부 레이아웃 구성을 유지하지는 않습니다. 예를 들어 class에 대해 시도했지만 \Magento\Catalog\Block\Product\View\Type\Simple템플릿 default.phtml에 사용 된 템플릿은 무시됩니다. 실마리가 전혀 없다
실뱅 레이

2
최신 정보를 보려면 여기로 이동하십시오. 2.2부터는 블록 클래스를 확장하지 않는 것이 좋습니다. 대신, 사용자 정의 프리젠 테이션 로직이 필요한 경우 ViewModel을 layout.xml의 블록에 대한 인수로 정의하고 선언해야합니다. ViewModels는 개체 관리자를 통해 구축되므로 Magento 2의 향후 릴리스에서 변경 사항을 변경하는 BC에 노출시키지 않고 자신의 종속성 그래프를 연결할 수 있습니다.
John Hall

1

나는 도우미를 모듈 내부의 전역 기능 ( '글로벌'이라는 단어는 미안하다)으로, 관리자 / 서비스 계약은 모듈 외부뿐만 아니라 내부에서도 사용할 수있는 전역 기능으로 간주합니다.

이 원칙을 따르면 도우미를 최소한으로 사용하는 것을 볼 수 있습니다. 모듈에서 구성 래퍼로만 사용합니다.

$this->configHelper->get(Config::PATH_TO_XML_PATH);
$this->configHelper->isEnabled();

이런 종류의 물건. 모듈 외부에서 실용적 일 수있는 다른 기능이있는 경우 대신 관리자를 만드십시오.

이상적인 환경에서 다른 모듈의 기능이 필요한 타사 개발자는 리포지토리 및 관리자 및 Api폴더 의 항목에 사용 가능한 인터페이스 만 살펴 봐야합니다 .

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