magento2 에서처럼 간단한 작업을 수행하는 방법이 있습니까?
magento 2에서 이와 같은 호출 함수
$model = Mage::getModel('cms/page');
답변
Magento는 ObjectManager의 사용을 직접 권장하지 않습니다. 모든 시나리오에서이를 추상화하는 서비스 클래스를 제공합니다.
주사 불가 제품 (모델)은 모두 공장을 사용해야합니다.
보호 된 $ pageFactory; 공용 함수 __construct (\ Magento \ Cms \ Model \ PageFactory $ pageFactory) { $ this-> pageFactory = $ pageFactory; } 공용 함수 someFunc () { ... $ page = $ this-> pageFactory-> create (); ... }
생성자에서 원하는 모델의 팩토리를 요청하면됩니다. Magento 또는 컴파일러를 실행할 때 자동으로 생성됩니다.
답변
다음과 같이 할 수 있습니다.
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
그러나 _objectManager
멤버가 존재 하는지 확인해야 합니다.
대부분의 클래스에서는 생성자에 삽입하지 않으면 클래스에 있어야합니다. 이처럼 :
protected $_objectManager;
public function __construct(
...,
\Magento\Framework\ObjectManager $objectManager,
....
){
....
$this->_objectManager= $objectManager;
....
}
[1 년 후 편집]
위의 답변이 효과가 있지만 최선의 방법은 아닙니다. 올바른 방법은 Anton의 대답을 참조하십시오.
답변
당신의 인스턴스가 기술적 경우 \Magento\Framework\ObjectManager
는 호출 할 수 create
의 get
이 당신에게 당신이 원하는 객체를 제공 할 것입니다. 그러나 Magento 2가 constructor을 통한 의존성 주입으로 이동함에 따라 실제로 이것을 사용하려는 위치에 따라 다릅니다 .