2

我将所有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项目,它运行良好。

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

4

4 回答 4

3

当已经存在使用该类的对象时会发生错误。

解决方案

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

现在尝试加载 frondend。它会起作用的。

于 2015-01-16T06:34:00.543 回答
1

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

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

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

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

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

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

于 2017-11-16T08:19:35.833 回答
0

你可以:

  • 在 config.xml 中设置 <debug>1</debug> - 这应该会显示错误

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

于 2015-01-09T07:46:28.387 回答
0

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

不过,我可以推测:

数据库凭据(也就是数据库用户名)是否相同?如果不是,您可能需要从 DB Dump 中删除 SECURITY DEFINER。请参阅:从 MySQL 转储中删除 DEFINER 子句以获取有关如何执行此操作的提示。

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

让我们知道结果如何。

于 2015-01-09T09:55:14.770 回答