如何在代码更改后“重新加载”自定义模块
-
30-09-2020 - |
题
我已经制作了几个自定义模块,即为类别添加属性。 这对我来说是第一次,所以我第一次设置模块,启用它,到目前为止一切都很好。
但是当我回去对代码进行更改时,我没有看到它们发生(我说的是更改标签中的文本,所以它应该是可见的)。我认为它必须与模块的实现方式有关,所以我尝试了;
- 禁用/启用模块
- 清除缓存/var/文件夹
- 运行
setup:static-content:deploy
- 运行
setup:upgrade
- 运行
setup:db-schema:upgrade
和 - 将 module.xml 中的模块版本从 1.0.0 更改为 1.0.1
- 运行
indexer:reindex
setup:db-data:upgrade
但是我仍然看不到模块中的更改。我必须做什么才能“应用”模块中的更改?
对于属性的创建,我使用 Setup/InstallData.php
文件。可能是数据设置了一次,并且没有通过编辑“刷新”吗?解决此问题的最佳方法是什么(可能更改名称,在数据库中删除)?
编辑:我现在也更改了字段 ID 并重新执行了上述所有步骤,但仍然无济于事:/
更新: 这是我用来了解我所在位置的教程;http://www.ibnab.com/en/blog/magento-2/magento-2-add-custom-eav-attribute-to-category-or-customer
为了测试它,起初我创建了一个文本字段作为属性。那行得通,现在我想将其更改为媒体字段(例如第二类图像字段)。这是有问题的(部分)代码( Setup/InstallData.php
):
$categorySetup->removeAttribute(\Magento\Catalog\Model\Category::ENTITY, 'cat_bgimg1');
$categorySetup->addAttribute(
\Magento\Catalog\Model\Category::ENTITY, 'cat_bgimg1', [
'type' => 'file',
'label' => 'Category backgroundimage',
'input' => 'file',
'source' => '',
'visible_on_front' => true,
'required' => false,
'sort_order' => 100,
'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
'group' => 'General Information',
]
更新
为了尝试强制更改我禁用了模块,我将 module.xml
更新为 1.0.1 <module name="MyModule" setup_version="1.0.1">
并重新启用了模块,运行 setup:upgrade
等。在数据库表 setup_module
中添加了新版本,但代码中的更改没有没有申请。也许这是因为我只有一个 InstallData 脚本,没有更新脚本。
更新 3 lord_of_strings 给了我正确的信息,说明它是如何工作的以及它为什么会这样工作。我最终只是清除了所有内容并再次添加它。
解决方案
如果您在 adminhtml 中有属性,则意味着您至少使用过一次 sql 脚本 (InstalData.php)。运行 setup:upgrade
时会运行 Sql 脚本。
查看表 setup_module
。在这里您可以找到所有模块及其版本。你也应该找到你的。有一个列 data_version
或类似的东西。如果您想以编程方式(从 sql 脚本)修改我们的属性,您必须使用您的模块版本删除行并再次运行 setup:upgrade
。在此之前,您还应该删除您的属性(我认为最好的方法是从 adminhtml,而不是直接在 DB 中)。比执行命令时,您应该更改属性,当然如果它们是正确的。
还有其他方法可以进行更改 - 升级脚本,然后除了准备脚本本身之外,您还必须将模块版本更改为更高版本。
其他提示
听起来很奇怪,但您可以尝试的另一件事是在开发扩展程序时确保您处于开发人员模式。
php bin/magento deploy:mode:show
如果没有说开发人员,您可以使用
php bin/magento deploy:mode:set developer
您的代码也可能会受到 opcache 的影响以清除此问题,您可以更改 php 中的设置或在您的服务器上运行以下 php 函数:
<?php
opcache_reset();