API eZ Publish 5 — ошибка команды CreateContent

Я пытаюсь создать контент, следуя этому примеру в кулинарной книге:

https://github.com/ezsystems/CookbookBundle/blob/master/Command/CreateContentCommand.php

На данный момент я просто пытаюсь создать содержимое папки, у меня возникает следующая ошибка при выполнении сценария:

Неустранимая ошибка PHP: вызов атрибута функции-члена () для необъекта в /vagrant/application/ezpublish_legacy/kernel/search/plugins/ezsearchengine/ezsearchengine.php в строке 53

Вот код:

     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);
}

Последняя строка:

$content = $contentService->publishVersion($draft->versionInfo);

вызывает проблему, когда я проверяю трассировку стека.

Больше информации :

  • Объект получен из базы данных eZ 4
  • Быть воссозданным в базе данных eZ 5.

Благодарю.

0

Решение

Вы смешиваете устаревший код с новым стековым кодом Re: ‘eZContentObject :: fetch’.

Я не думаю, что это необходимо или правильно, так как кажется, что вы запускаете устаревший код вне устаревшего контекста. Вы должны быть в состоянии написать свой код без использования устаревшего кода. Из того кода, которым вы поделились, я не вижу необходимости в унаследованном коде, и на вашем месте я бы вообще не использовал унаследованный код для этой задачи.

Если вы настаиваете на использовании устаревшего кода в новом стековом коде, вы должен только запустить его в течение устаревшее ядро или же очень много непредсказуемых вещей могут пойти не так или просто не работать вообще.

https://doc.ez.no/display/EZP/Legacy+code+and+features#Legacycodeandfeatures-Runninglegacycode

Я думаю, что это строка с ошибкой, на которую вы ссылались, https://github.com/ezsystems/ezpublish-legacy/blob/master/kernel/search/plugins/ezsearchengine/ezsearchengine.php#L53

Я также больше не буду доверять базе данных, в которой вы запускаете код, которым вы поделились. Вы должны удалить базу данных как весьма вероятную поврежденную, установить свежую копию из производственных резервных копий, переписать свой код, чтобы не использовать устаревший код, так как он не требуется, и повторите попытку.

Также помните, что платформа eZ совместима с данными с eZ Publish, а это означает, что новый код стека может считывать (и изменять) содержимое базы данных, созданное с помощью eZ Publish, поскольку в новом стеке их нет никакой разницы. Что также означает, что им нет необходимости использовать ‘eZContentObject :: fetch’, даже если он был внутри унаследованной оболочки.

PS. Эта тема кросс-пост от: http://share.ez.no/forums/ez-publish-5-platform/creating-content-with-ez-5-api-error

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]