将 pimcore 从服务器移动到本地时出现致命错误

Fatal error when moving pimcore from a server to local

我将所有 pimcore 文件和数据库从服务器移至我的本地主机,并在 website/var/config/system.xml 中进行了必要的更改。 管理员正在工作,但前端显示错误:

Fatal error: Call to a member function getFielddefinitions() on a non-object in /var/www/html/pimcore/pimcore/models/Object/Localizedfield/Resource.php on line 179

这行代码产生错误:

$this->model->getClass()->getFielddefinition("localizedfields")->getFielddefinitions()

系统要求和文件权限正确。

出于测试目的,我在本地系统上安装了一个新的 pimcore 项目,它运行良好。

我可以对我的 数据库 进行任何更改吗? 如何在本地成功运行我的项目?

您可以:

  • 在 config.xml 中设置 1 - 这应该显示错误

  • 如果没有帮助,请检查 apache and/or php 错误日志。

我们需要查看实际错误(正如 Vinod 已经指出的那样)。

不过我可以推测:

数据库凭据(又名数据库用户名)是否相同? 如果不是,您可能需要从数据库转储中删除 SECURITY DEFINER。 请参阅:Remove DEFINER clause from MySQL Dumps 了解如何操作的提示。

另一个错误来源可能是缓存。您使用的是默认的基于文件的 Pimcore 缓存吗? 如果是这种情况,请尝试从 website/var/cache 和 website/var/tmp

中删除所有文件

告诉我们结果如何。

当使用 class.

已经存在对象时会发生错误

解决方案

  1. 以管理员身份登录到后端。
  2. 转到Settings > Object > Classes
  3. 对于左侧树中的每个 classes,单击它们,然后点击右下角的 保存。 (如果无法保存,只需点击按钮 添加新的 class 来创建一个新的 class )

现在尝试加载前端。它会起作用。

Pimcore 使用数据库视图来存储对象数据。导出数据库时,视图定义中也会有SECURITY DEFINER。

/*!50013 DEFINER=`prod-user`@`%` SQL SECURITY DEFINER */

  1. 选项:Vinot VT 解决方案应该有效 您可以使用 运行 命令获得相同的结果:

php pimcore/cli/console.php deployment:classes-rebuild

  1. 选项:在您的本地环境中使用相同的数据库用户名'prod-user',如果您要大量导入产品数据库,这很有用

  2. 选项:在导入数据库之前将 DEFINER=prod-user@% 替换为 DEFINER=local-user@%