我正在为具有自己的 eZPersistantObject 的 eZPublish 扩展编写代码,因此它需要一个自己的数据库表。
有没有办法提供一种 setup.php 或其他东西,它在扩展激活时运行并创建表?
感谢您的回复。
在安装扩展时,eZ Publish 不提供这样的功能(并不是说您需要更改数据库中的内容才能这样做,只需要自动加载重新生成)。
关于您的问题,您唯一能做的就是在您的扩展中添加一个 .dba 文件,以便在管理界面中使用系统检查/升级时对其进行检查。该文件可以使用 bin/php 中的 ezsqldumpschema.php 脚本生成(您会注意到缺少一些内容,例如字符集,...)
如果您的扩展程序提供管理界面,请随意在每个视图脚本的开头添加一种 pre_check 函数。这应该根据 dba 文件检查表是否存在,并在需要时创建它(或提示用户)。
似乎在您的 CMS 中安装扩展时,您还需要手动执行进一步的步骤,例如更改数据库。请参阅http://doc.ez.no/eZ-Publish/Technical-manual/4.x/Installation/Extensions所以我认为 eZPublish 不支持这种设置。
您当然可以手动执行此类操作,例如CREATE TABLE IF NOT EXISTS
对每个请求执行一次。一个肮脏的解决方案:将您setup.php
的扩展文件夹中的某个位置,使其可写,并在第一次执行后将其删除。只需unlink(__FILE__);
在末尾添加setup.php
.
如果您想要一些更干净的解决方案,您可以拥有一个包含数据库迁移脚本的目录和一个跟踪哪些脚本已执行的表。然后在每个请求上检查是否有新的迁移脚本并在必要时执行。