后端扩展的 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 中有效...
我正在从 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 中有效...