确定 取消

joomla4扩展安装执行update里面的sql,但并不执行install里面的sql

b

big big girl

经验分享 4 月 3 周 前

这两天遇到了一个很奇怪的问题:

在新安装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文件夹。导致系统认为组件已经存在,所以执行了安装脚本,而不是更新脚本。

0
0 回复