Как создать модуль в Magento2?
Вопрос
Есть ли способ сделать что-то простое, как в 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 сдвигов в направлении Инъекция зависимостичерез конструктор .