这两天遇到了一个很奇怪的问题:
在新安装joomla4组件的时候,发现系统执行的是update里面的sql,并不执行install里面的sql。按照道理,初次安装,理论上应该执行install里面的sql。那么问题出现在什么地方呢?
实际上在几个月前就陆续的出现了这种情况,只是因为时间紧,就没有研究这个事情的原因。这两天又出现了,决定花时间攻克这个问题。
主要的表现如下:
1,在干净的joomla上,一切正常。
2,安装过一次之后,手动删除组件文件夹后,再次安装出现异常。
3,在joomla3上面一切正常
通过对整个安装脚本的单步调试跟踪,最后发现问题出现在api文件夹。
/*
* If the component site or admin directory already exists, then we will assume that the component is already
* installed or another component is using that directory.
*/
if (
file_exists($this->parent->getPath('extension_site'))
|| file_exists($this->parent->getPath('extension_administrator'))
|| file_exists($this->parent->getPath('extension_api'))
) {
在joomla3中,之前是没有API文件夹的,这个是后面增加的。我在卸载扩展的时候只注意检查了site和administrator这两个文件夹,而没有处理api文件夹。导致系统认为组件已经存在,所以执行了安装脚本,而不是更新脚本。