Magento2에서 모델을 인스턴스화하는 방법은 무엇입니까?
문제
는 Magento2에서와 같이 간단한 일을하는 방법이 있습니까?
콜 함수는 magento 2,
$model = Mage::getModel('cms/page');
. 해결책
마젠토는 엄격하게 ObjectManager의 사용을 직접 사용하지 않습니다.모든 시나리오에 대해 추상화하는 서비스 클래스를 제공합니다.
모든 비 주사제 (모델)의 경우 공장을 사용해야합니다.
protected $pageFactory; public function __construct(\Magento\Cms\Model\PageFactory $pageFactory) { $this->pageFactory = $pageFactory; } public function 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.stackexchange