2

我正在创建一个模块,该模块需要在安装模块时完成(仅一次)。可能需要做很多事情,但我需要做的最基本的事情是对服务器进行 API 调用,让外部服务器知道模块已安装,并获取一些更新的配置项目。

我在stackoverflow上阅读了这个问题,但是在我的情况下,我真的对执行与数据库、固定装置、更新表等无关的代码感兴趣。另外,为了清楚这个模块没有影响(效果?)前端。仅供参考,我还阅读了 Alan Storm 的这篇精彩文章,但这确实让我明白了安装/升级脚本不适用于执行随机 PHP。

在我看来,我有几种可能的方法来实现这一点:

  • 我做了我担心不是最佳实践的事情,并在我的设置/安装脚本中添加了一些 PHP 来执行这个 php
  • 我创建了某种 cronjob,它只执行一次我需要的任务(不确定这将如何工作,但它似乎可能是一个“创造性”的解决方案——当然,如果 cron 设置不正确,那么这将失败,这不好
  • 我创建了一个 core_config_data 标志('mynamespace/mymodule/initialized'),在我的脚本运行后设置它,并检查我的模块触及的 adminhtml 的每个区域(CMS/Pages 和我自己的自定义 adminhtml 控制器)。这似乎是一个很好的解决方案,除了每次点击 CMS/Pages 或点击我的控制器时所有额外的开销,检查这个 core_config_data 设置。这个解决方案的好处是,如果我的 API 调用失败了,我可以将此标志设置为 false,它将再次运行,显示适当的消息,并继续运行直到它成功(或有额外的逻辑XX 次尝试后将停止初始化代码)

这些选项中的任何一个都是“最佳”方式吗?在某个地方是否有任何先例,例如受人尊敬的扩展或 Magento 本身?

在此先感谢您的时间!

4

1 回答 1

1

你提出了一个有趣的问题。

目前,我不知道在模块安装中执行任意 PHP 的方法,显而易见的方法(正确/错误)是按照 Q 的 1 使用安装程序设置/升级脚本。

2和3似乎是一种资源密集型的方法,即。不必要地检查每个页面加载(缓存与否)。

还有使用./pear安装模块的方法(假设您使用 Magento 打包它)。我快速浏览了一下,./downloader/pearlib/php/pearmage.php但没有看到任何执行的行(与复制文件相比)。我会想象这是在安装时执行某些操作的最佳位置(除了上面提到的 1)。

但是,我从来没有研究过这个,所以我对其他可能的答案很感兴趣。

于 2012-03-13T23:38:06.570 回答