Questions tagged «code-generation»

2
Magento2如何生成特定的ExtensionFactory和ExtensionAttributeInterface?
我想使用扩展属性来解决问题,例如引用项目。 使用像Magento 1这样的设置类向这样的实体添加自定义属性没有问题,这不是这个问题。 现在,当我想公开由扩展程序通过实体API添加的属性作为扩展属性时,魔术使我不知所措。 更新:我知道常规工厂是如何生成的。这个问题是关于特殊工厂的,这些工厂为生成的扩展属性接口实例化生成的实现。 这是我要使其正常工作所采取的步骤。我要添加这些内容,因此无论是谁尝试回答,都无需赘述。 我的问题是如何或为何它的工作原理。 通过实体API公开扩展属性的步骤: 创建一个etc/extension_attributes.xml将属性添加到实体接口的 创建一个插件以将属性值添加到实体ExtensionAttributes实例。 为了做第二点,ExtensionAttributes需要实体实例。因此,插件依赖于工厂,对象管理器通过DI提供该工厂。 对于报价项目Magento\Quote\Api\Data\CartItemExtensionFactory,必须使用示例。 我猜想工厂的类型一定是引发魔力的触发器。 然后,Magento \Magento\Quote\Api\Data\CartItemExtensionInterface用所有扩展属性的设置器和获取器生成匹配接口。 但是,它似乎并未为该接口生成具体的实现。至少,PHPStorm没有看到它。 Magento如何收集生成类所需的信息?如何在具体实例上调用生成的接口方法?它是仅在内存中生成的类吗? 我很高兴它能奏效,但这并不能令人满意。Magentos使用扩展自动创建的属性的能力是其成功的关键因素。作为模块开发人员,我相信我需要对整个过程有透彻的了解。 如果我有时间,我自己会自己研究一下,但是我希望能得到一个解释。 更新2:花一点时间阅读\Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator和阅读\Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator。现在我至少有一个大概的想法。如果没有人击败我,我将在某一时间写一个完整的过程的描述,因为我认为这将是一个有用的参考。

14
Magento 2允许的内存耗尽错误编译代码
添加模块时出现错误。 请重新运行Magento编译命令 所以我在命令下运行,但在从根目录运行命令时也显示以下错误, php magento设置:di:compile Compilation was started. %message% 0/7 [>---------------------------] 0% 1 sec 37.0 MiB%message% 0/7 [> ---------------------------] 0% 1 sec 37.0 MiBProxies code generation... 0/7 [ >---------------------------] 0% 1 sec 37.0 MiB Proxies code generation... 1/7 [====>-----------------------] 14% 47 secs 43.5 MiB Repositories code generation... 1/7 [====>-----------------------] 14% …

3
magento升级后出现错误
在CLI中触发此命令后 php bin/magento setup:upgrade 我收到以下错误-: Fatal error: Uncaught exception 'Magento\Framework\Exception\LocalizedException' with message 'Can't create directory /var/www/html/magento/magento2.0/var/generation/Magento/Framework/App/ResourceConnection/.' in /var/www/html/magento/magento2.0/vendor/magento/framework/Code/Generator.php:103 Stack trace: #0 /var/www/html/magento/magento2.0/vendor/magento/framework/Code/Generator/Autoloader.php(35): Magento\Framework\Code\Generator->generateClass('Magento\\Framewo...') #1 [internal function]: Magento\Framework\Code\Generator\Autoloader->load('Magento\\Framewo...') #2 [internal function]: spl_autoload_call('Magento\\Framewo...') #3 /var/www/html/magento/magento2.0/vendor/magento/framework/Code/Reader/ClassReader.php(19): ReflectionClass->__construct('Magento\\Framewo...') #4 /var/www/html/magento/magento2.0/vendor/magento/framework/ObjectManager/Definition/Runtime.php(44): Magento\Framework\Code\Reader\ClassReader->getConstructor('Magento\\Framewo...') #5 /var/www/html/magento/magento2.0/vendor/magento/framework/ObjectMana in /var/www/html/magento/magento2.0/vendor/magento/framework/Code/Generator.php on line 103`

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 …

2
注释中的“#@ +”和“#@-”字符串是什么意思?
在某些Magento 2类的注释中,我看到很多“#@ +”和“#@-”字符串。 \Magento\Customer\Api\Data\AttributeMetadataInterface interface AttributeMetadataInterface extends \Magento\Framework\Api\MetadataObjectInterface { /**#@+ * Constants used as keys of data array */ const ATTRIBUTE_CODE = 'attribute_code'; ... const IS_SEARCHABLE_IN_GRID = 'is_searchable_in_grid'; /**#@-*/ ... } 这些标记的目的是什么?

11
在“设置”名称空间中未定义任何命令:Magento 2
我已经安装了latest version of Megento 2,一切都很好的前端,后端和功能。 我对bin/magento setup:upgrade命令有一个问题 ,当我在终端中运行此命令时,出现以下异常。 [InvalidArgumentException] 在“设置”名称空间中没有定义任何命令。 屏幕截图: 我在安装过程中有什么想念的东西吗?还是需要安装一些软件包才能使其正常工作?

1
何时以及如何在view_preprocessed中生成phtml模板?
我看到了在var/view_preprocessed/html中从核心模块以及自定义模块生成的许多phtml文件。看起来这些都是带空格的已使用模板。 艾伦·肯特(Alan Kent)在“ 如何在Grunt中更新Magento 2 phtml文件”中写道?: 您无需“部署” PHTML文件。它们由布局文件中的块引用,并在服务器端进行处理。因此,“咕gr声”在这里不相关,并且静态内容部署同样不相关。 在分析静态内容部署和繁琐的工作流程时,我没有发现与模板相关的任何内容,因此我认为这仍然成立。 但是何时生成这些文件?那里到底发生了什么,为什么?

4
删除Magento 2中的所有缓存后出错
在删除所有缓存为 rm -rf var/cache/* var/page_cache/* var/view_preprocessed/* var/generation/* 我低于错误 Warning: ltrim() expects parameter 1 to be string, object given in vendor\magento\framework\Code\Generator\EntityAbstract.php on line 152 Notice: Uninitialized string offset: 0 in vendor\magento\framework\Autoload\ClassLoaderWrapper.php on line 81 Notice: Uninitialized string offset: 0 in vendor\composer\ClassLoader.php on line 317 Notice: Uninitialized string offset: 0 in vendor\composer\ClassLoader.php …

2
Magento2正确顺序以刷新所有缓存/静态文件
我在Magento2中使用生成的类,预处理的文件和缓存进行开发时遇到了困难。 与Magento1相比,禁用所有缓存时似乎无法再有效开发,此外,我还需要查看缓存是否干扰了我构建的功能。 我的问题是,缓存和生成的文件太多了,我不确定它们之间是相互依赖的,我不确定应该以什么顺序刷新它们以便对我的所有开发情况有一个全新的了解。 有后端缓存区域 所有可以清除的标准缓存 目录图像缓存 静态文件缓存 CSS / JS缓存 然后是bash命令 php bin / magento缓存:干净 php bin / magento设置:静态内容:部署 然后有可以手动删除的文件夹 变/代 var /缓存 var / page_cache var / view_preprocessed pub / static 那有很多可能性,可能不是全部。因此,如果我部署大型更新,则代码更改,CSS / JS更改,模板更改 我应该执行以下哪些步骤来清洁所有物品?这些步骤必须按什么顺序执行?

2
Magento 2代理类覆盖
我需要\Magento\Catalog\Model\Product\Link使用首选项覆盖该类,这可以正常工作,但是上述类具有自动生成的代理类\Magento\Catalog\Model\Product\Link\Proxy,该代理类不包括在覆盖中添加的新方法。有什么方法可以将这些方法注入代理类中? 编辑 我试图对此进行深入研究,发现我们可以使用di.xml注入代理。但是,当我尝试这样做时,出现了类Package\Module\Model\Class\Proxy不存在的异常。这意味着我尝试生成的新代理不会自动生成。
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.