后端扩展的 typo3 createAction 不保留数据

typo3 createAction of a backend extension does not persist data

我正在从 typo3 6.2.31 迁移到 7.6.23

我有以下功能:

public function createAction(\TYPO3\Institutsvideoverwaltung\Domain\Model\Category $newCategory) {
    $contentCat = $this->request->getArgument('newCategory');
    if ($contentCat['isRoot'] == '1') {
        $this->categoryRepository->add($newCategory);
        $this->addFlashMessage($newCategory->getName(), 'Kategorie erfolgreich angelegt!', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK);
    } else {
        if (!empty($_POST['tx_institutsvideoverwaltung_auditgarant_institutsvideoverwaltungvideoverwaltungbackend']['catAllocationUIDs'])) {
            $catAllocationUIDs = $this->request->getArgument('catAllocationUIDs');
            foreach ($catAllocationUIDs as $catAllocationUID) {
                $category = $this->categoryRepository->findByUid($catAllocationUID);
                $category->addChildCategory($newCategory);
                $this->categoryRepository->update($category);
            }
            $this->addFlashMessage($newCategory->getName(), 'Kategorie erfolgreich angelegt!', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK);
        } else {
            $this->addFlashMessage('Das Objekt wurde nicht angelegt, da keine Zuordnung erfolgt ist. Wenn es sich um kein Wurzelelement handelt, nehmen Sie zumindest eine Zuordnung vor.', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
        }
    }
    /*  }*/
    $this->redirect('list');
}

它说一切正常,但它不持久化数据。可能是什么问题?

当我手动添加一条记录到数据库时,它也没有显示:(

更新输出Var_dump

编辑: 我收回我在这里所说的一切。 @paul-beck 是对的,在 createAction 之后重定向实际上确实保留了创建的对象。我敢肯定它并不总是那样,并且在引入时无法在文档中找到。我会把这个答案留在这里作为参考。

当您的操作 returns 负责自动持久化时,AbstractController 接管。这发生在 createActions 和 updateActions 之后。但是您的重定向阻止了这种情况的发生。只需在像这样重定向之前通过调用 persistall 手动合并持久化,你应该没问题。

$this->persistenceManager->persistAll();
$this->redirect('list');

您需要一个 PersistenceManager 的实例。

/**
 * @var \TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface
 * @inject
 */
protected $persistenceManager;

经过一些 TeamViewer 调查,我们发现问题出在模型和 TCA 中。

模型具有属性 protected $uid = ''。当然,UID 不能是字符串,也不应该这样声明。但是,createAction 中的调试表示该对象是 "persisted entity",因此持久性管理器认为无事可做。从模型中删除 $uid 并更新到 TCA 以兼容 7 LTS 后,问题就解决了。

我想在模型中将 $uid 声明为整数不是问题,但作为字符串对于系统来说实在是太多了。令人惊奇的是,这在 TYPO3 6 LTS 中有效...