Magento 1에서 Controller 작업의 데이터를 "View"(예 : 레이아웃의 블록)로 전달하려면
를 통해 글로벌 레지스트리에 값 / 객체 추가
Mage::register
실행 후 블록 객체를 직접 페치하고 페치 된 블록 객체의 데이터 속성을 설정합니다.
loadLayout
phtml
파일의 블록 객체에 대한 메소드를 호출 하고 블록 객체가 모델 / 데이터베이스 계층을 사용하여 컨트롤러 작업에 이전에 저장된 데이터를 읽도록합니다.
Magento 2에서 블록 객체 메소드를 사용하여 데이터베이스에서 읽는 것은 여전히 작동하는 것으로 보입니다. 이는 특정 종류의 작업에 적합합니다. 하나,
더 이상 Magento 2에 글로벌 레지스트리가 없습니다 (또는 있습니까?)
레이아웃 시스템은 이제 팩토리를 통해 페이지 객체를 생성하여 작동하며 Magento 1에서와 같은 방식으로 블록 참조를 가져올 수 없습니다
Magento 2에서 컨트롤러 작업에서보기로 데이터를 직접 전달할 수 있습니까? 아니면 이것이 마젠 토의 새롭고 멋진 Design Pattern ™ 세계에 대한 직접적인 패턴입니까? 이 패턴이 너무 직접적인 패턴 인 경우 템플릿에 표시하려는 계산 된 정보가 있지만 해당 정보를 상태 저장 시스템에 저장하지 않으려면 어떻게해야합니까 (예 : 데이터를 저장하지 않으려는 경우) 데이터 베이스)
나는 이것을 직접 해킹하는 몇 가지 다른 방법을 생각할 수 있지만 Magento 2 가 당신이 그것을 하기 를 원하는 방법에 관심 이 있습니다.
참고 : 이와 같은 것을 사용하여 컨트롤러 작업에서 블록 인스턴스를 가져올 수 있다는 것을 알고 있습니다.
$resultPage = $this->resultPageFactory->create();
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');
var_dump(spl_object_hash($block));
Magento 2 핵심 코드가이 작업을 자주 수행합니다. 그러나 - 블록 객체 제어기 개체에서 가져온 것으로 보인다 (A)에 사용할 수있는 것보다 다른 목적 phtml
을 통해 서식하거나 $this
또는 $block
((전자는 $this
) 반면 이상 (실제로 템플릿을 렌더링하는 것을 목적으로 나타난다는 $block
) 것으로 보인다 마 젠토 블록 유형의 인스턴스).
#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));
컨트롤러 액션 메소드에서 데이터를 설정하면 phtml
템플릿 에서 사용할 수 없으므로 spl_object_hash
위 의 결과를 비교하면 세 가지 해시가 있기 때문에 "있는 것처럼 보입니다"라고 말합니다 . 그러나 위의 다른 오류가있을 수있을 정도로이 모든 것에 익숙합니다. 따라서 블록에 데이터를 설정하고 템플릿에서 데이터를 가져올 수 있다면 그것에 대해 듣고 싶습니다. !