문제

는 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의 인스턴스가있는 경우 createget를 호출 할 수 있으므로이 객체를 제공합니다.그러나 그것은 실제로 종속성 주입으로 바뀌는 것에 따라 이것을 사용하려는 위치에 달려 있습니다.생성자를 통해 .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top