题
有没有办法像magento2一样做一些简单的事情?
在magento 2中调用这样的函数,
$model = Mage::getModel('cms/page');
解决方案
Magento严格劝阻直接使用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');
.
,但您必须确保存在的属性icetagcode成员存在。
在大多数类中,它应该,但如果它不会在构造函数中注射它。像这样:
protected $_objectManager;
public function __construct(
...,
\Magento\Framework\ObjectManager $objectManager,
....
){
....
$this->_objectManager= $objectManager;
....
}
.
[编辑一年]
即使上面的答案是有用的,它也不是最好的做法。出于正确的方式,看看安东尼的答案。
从技术上讲,如果您有一个实例 \Magento\Framework\ObjectManager
你可以打电话 create
的 get
这会给你你想要的东西。但这实际上取决于您想在哪里使用它,因为 Magento 2 转向 通过构造函数进行依赖注入.