magento2에서 모델을 인스턴스화하는 방법은 무엇입니까? 수행하는 방법이

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는 호출 할 수 createget이 당신에게 당신이 원하는 객체를 제공 할 것입니다. 그러나 Magento 2가 constructor을 통한 의존성 주입으로 이동함에 따라 실제로 이것을 사용하려는 위치에 따라 다릅니다 .