Вопрос

Есть ли способ сделать что-то простое, как в Magento2?

Вызов функции, как это в Magento 2,

$model = Mage::getModel('cms/page');
.

Это было полезно?

Решение

Magento Strictsious напрямую препятствует использованию объектаManager напрямую.Он предоставляет классы услуг, которые абстрактны его для всех сценариев.

Для всех неингментов (моделей) вы должны использовать фабрику:

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;
    ....
}
.

[РЕДАКТИРОВАНИЕ Один год спустя]

Даже если ответ выше работает, это не лучшая практика.На правильный способ сделать это увидеть ответ Антон.

Технически, если у вас есть экземпляр \Magento\Framework\ObjectManager, вы можете позвонить в create get, и это даст вам желаемое объект.Но это действительно зависит от того, где вы хотите использовать это для Magento 2 сдвигов в направлении Инъекция зависимостичерез конструктор .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top