Php eZ Publish 5 API-CreateContent命令错误

Php eZ Publish 5 API-CreateContent命令错误,php,symfony,command,ezpublish,Php,Symfony,Command,Ezpublish,我正试图按照烹饪书上的以下示例创建内容: 目前我正在尝试创建“文件夹”内容,执行脚本时出现以下错误: PHP致命错误:在第53行的/vagrant/application/ezpublish_legacy/kernel/search/plugins/ezsearchengine/ezsearchengine.PHP中调用非对象上的成员函数attribute() 代码如下: foreach ($tabPreImportData as $object) { $output

我正试图按照烹饪书上的以下示例创建内容:

目前我正在尝试创建“文件夹”内容,执行脚本时出现以下错误:

PHP致命错误:在第53行的/vagrant/application/ezpublish_legacy/kernel/search/plugins/ezsearchengine/ezsearchengine.PHP中调用非对象上的成员函数attribute()

代码如下:

     foreach ($tabPreImportData as $object) {
        $output->writeln('<info> Object ID: ' . $object['id_object'] . '</info>');

        $objectToMigrate = eZContentObject::fetch($object['id_object']);

        $contentType = $contentTypeService->loadContentTypeByIdentifier('folder');
        $contentCreateStruct = $contentService->newContentCreateStruct($contentType, 'eng-US');

        foreach ($objectToMigrate->dataMap() as $attrIdentifier => $attrValue) {
            $contentCreateStruct->setField($attrIdentifier, $attrValue->DataText);
        }

        $locationCreateStruct = $locationService->newLocationCreateStruct(2);
        // create a draft using the content and location create struct and publish it
        $draft = $contentService->createContent($contentCreateStruct, array($locationCreateStruct));
        $content = $contentService->publishVersion($draft->versionInfo);
    }
在检查堆栈跟踪时导致问题

更多信息:

  • 该对象是从eZ 4数据库中获取的
  • 要在eZ 5数据库中重新创建

谢谢。

您正在将旧代码混合到新的堆栈代码中,例如:“eZContentObject::fetch”

我不认为这是必要的或正确的,因为您似乎在遗留上下文之外运行遗留代码。您应该能够在不使用遗留代码的情况下编写代码。从您共享的代码来看,我不认为有任何需要遗留代码,如果我是您,我根本不会在这个任务中使用遗留代码

如果您坚持在新的堆栈代码中使用遗留代码,那么必须只在遗留内核存储模块中运行它,否则许多不可预知的事情可能会出错或根本不起作用

我想这是你提到的那条错误的线

我也不再信任运行共享代码的数据库。您应该删除很可能已损坏的数据库,安装生产备份的新副本,重写代码以不使用旧代码,因为它不是必需的,然后重试

还请记住,eZ平台与eZ Publish数据兼容,这意味着新堆栈代码可以读取(和更改)使用eZ Publish创建的数据库内容,因为它们在新堆栈中没有任何区别。这也意味着他们不需要使用“eZContentObject::fetch”,即使它位于旧机柜中


另外,此帖子来自:

谢谢,我会找到另一种方法。
$content = $contentService->publishVersion($draft->versionInfo);