Questions tagged «factory»

5
我们何时应该在Magento 2中使用存储库和工厂?
我已经阅读了Magento 2中的一些教程,这让我有些困惑。我可以看到基本上有两种方法可以读取/写入业务实体: 检索数据 使用工厂方法 $object = $this->myFactory->create(); $object->load($myId); 使用存储库方法 $repo = $this->myRepository(); $object = $repo->getById($myId); 保存数据 使用工厂方法 $object = $this->myFactory->create(); $object->load($myId); $object->setData('something', 'somethingDifferent')->save(); 使用存储库方法 $repo = $this->myRepository(); $object = $repo->getById($myId); $object->setData('something', 'somethingDifferent'); $repo->save($object); 我还看到,可以使用依赖项注入来注入存储库和工厂类。至少对我来说这令人困惑。 我们什么时候应该使用存储库方法和工厂方法?我们需要遵循的最佳实践是什么?

3
是什么触发了Magento 2中工厂的产生
Magento 2包含许多预先生成或即时生成的类文件。他们住在 var/generated 这些生成的文件包括工厂类。根据文档,据我了解,程序员使用工厂类来实例化“不可注入”对象。“不可注入”对象是无法通过__constructor依赖项注入添加的对象,通常是因为它需要用户输入才能实例化。 从文档中不清楚的是Magento 2如何知道它需要生成工厂类。这一点 如果对象管理器在运行时模式或编译器中遇到不存在的工厂,则对象管理器将生成工厂。 听起来好像我在对象管理器中使用工厂类(或者,在依赖项注入__constructors中使用扩展)时,Magento 2会为我生成它。但是对象管理器如何知道我要的东西是工厂? 同样,似乎有两个 命令可以自动生成(或“编译”)所有生成的类。运行这些命令中的任何一个都会生成大量的Factory类。 这些命令在寻找什么配置和/或代码文件以生成所需的工厂对象? 我知道一直追踪对象管理器和/或命令代码将揭示这一点,但是我希望避免那漫长而艰巨的旅程。

2
在magento2中使用页面工厂类
使用\Magento\Framework\View\Result\PageFactory在构造函数中注入的结果工厂类在Magento2中呈现自定义模块页面的目的是什么,并使页面显示 $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE); 而不是像在Magento 1.x方法中一样进行以下显示 $this->_view->loadLayout(); $this->_view->renderLayout();

2
Magento2工厂模式相对于Magento 1的优势
Magento 2对非注射剂使用工厂类。 例如产品类别:ProductFactory 例如客户类别:CustomerFactory 我不明白这里的工厂模式是什么? 因为对于与1个工厂类关联的每个类。我在想它有些重复。 为什么我们不应该创建抽象工厂CustomerFactory,ProductFactory等等? 并且例如: 我们可以通过AbstractFactory进行类型检查,而不是ProductFactory在ProductRepository类的构造函数。 因此我们可以避免ProductRepository和之间的紧密耦合ProductFactory 抽象工厂类: namespace Magento\Framework\ObjectManager\Code\Generator; /** * Abstract Factory class */ abstract class AbstractFactory { /** * Object Manager instance * * @var \Magento\Framework\ObjectManagerInterface */ protected $_objectManager = null; /** * Instance name to create * * @var string */ protected $_instanceName …

3
Magento 2:使用服务合同的好处是什么?
因此,如您所知,Magento 2建议的处理CRUD行为的模型/集合的方法是使用服务合同。 但是仍然根据Magento SE问答,似乎大多数人倾向于直接使用模型/资源模型/集合来代替。 作为加载报价的示例,我可以这样直接通过工厂进行报价: $this->quoteFactory->create()->load($quoteId); $this->quoteFactory的实例在哪里\Magento\Quote\Model\QuoteFactory 但是我也可以通过服务合同来做到这一点: $this->quoteRepository->get($quoteId); $this->quoteRepository的实例在哪里\Magento\Quote\Api\CartRepositoryInterface 所以我的问题是,与工厂相比,使用服务合同有什么好处?

2
Magento 2:将变量从控制器操作传递到“视图”
在Magento 1中,如果要将数据从Controller动作传递到“视图”(即,布局中的块,则可以) 通过以下方式将值/对象添加到全局注册表中 Mage::register 运行后直接获取块对象并在获取的块对象上设置数据属性 loadLayout 调用phtml文件中块对象的方法,并使块对象使用模型/数据库层读取以前保存在控制器动作中的数据 在Magento 2中,仍然可以使用块对象方法从数据库中读取数据,这适用于某些类型的操作。然而, Magento 2中不再有全局注册表(或存在?) 现在,布局系统可以通过工厂创建页面对象来工作,并且您无法像在Magento 1中一样获取块引用 在Magento 2中,是否可以将数据从控制器动作直接传递到视图?还是对于Magento勇敢的全新Design Pattern™世界而言,这是否太直接了?如果这是直接模式,那么如果我们要在模板中显示一些计算出的信息,但又不想将该信息存储到有状态系统中(即我们不想将其保存到数据库) 我可以想出几种不同的方法来自己破解这些东西-但我对Magento 2 希望您如何做感兴趣。 注意:我意识到可以使用类似这样的方法在控制器动作中获取块实例 $resultPage = $this->resultPageFactory->create(); $block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js'); var_dump(spl_object_hash($block)); Magento 2核心代码经常这样做。但是-在控制器对象中获取的块对象似乎与phtml通过$this或在模板中可用的对象不同$block(前者($this似乎是实际呈现模板的对象,而后者($block)似乎是实际呈现模板的对象) Magento块类型的实例)。 #File: path/to/template.phtml var_dump(spl_object_hash($block)); var_dump(spl_object_hash($this)); 我之所以说“似乎是”,是因为如果我在controller action方法中设置数据,则该数据在phtml模板中不可用-如果我比较spl_object_hash上面的结果,则会得到三个不同的哈希值。但是,对于这一切我还是很陌生,因此上面的内容可能是我犯的其他错误-因此,如果您能够在块上设置数据并将其提取到模板中,那么我很想听听!

1
Magento工厂方法中的全类名
在Magento 1中,如果我在工厂方法中使用完整的Magento类名,则可以实例化一个对象 //trying full class name instead of catalog/product $object = Mage::getModel('Mage_Catalog_Model_Product'); 但是,对于助手来说,这是行不通的。如果你试试 Mage::helper('Mage_Core_Helper_Url'); 你得到 Warning: include(Mage/Mage/Core/Helper/Url/Helper/Data.php): failed to open stream: No such file or directory in /path/to/magentolib/Varien/Autoload.php on line 93 #0 /path/to/magentolib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(Mage/Ma...', '/path/to/magent...', 93, Array) #1 /path/to/magentolib/Varien/Autoload.php(93): Varien_Autoload::autoload() #2 [internal function]: Varien_Autoload->autoload('Mage_Mage_Core_...') #3 /path/to/magentoapp/Mage.php(547): spl_autoload_call('Mage_Mage_Core_...') #4 /path/to/magentoapp/code/local/Sebastianjuffar/Commercebug/controllers/IndexController.php(11): …
11 model  helper  factory 

1
ObjectManager工厂的区别是什么?
我看到Magento 2有3个工厂类(如果算上抽象的,则有4个工厂类)。 \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Developer \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Production \ Magento \ Framework \ ObjectManager \ Factory \ Compiled 以上所有扩展\Magento\Framework\ObjectManager\Factory\AbstractFactory。 我以为在开发人员模式下Developer将使用工厂,但有时会使用工厂,而Compiled我无法为此确定条件。 有人可以解释使用每个工厂的时间以及它们之间的区别吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.