Php 后端扩展的typo3 createAction不保留数据
我正在从typo3 6.2.31迁移到7.6.23 我有以下功能:Php 后端扩展的typo3 createAction不保留数据,php,typo3,typo3-6.2.x,typo3-7.6.x,Php,Typo3,Typo3 6.2.x,Typo3 7.6.x,我正在从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') { $
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');
}
它说一切正常,但不能持久化数据。有什么问题吗
当我将记录手动添加到数据库时,它也不会显示:(
更新出变量转储
编辑:我收回我在这里所说的一切。@paul beck是对的,createAction之后的重定向实际上会保留创建的对象。我确信它并不总是这样,并且在引入时在文档中找不到。我将此答案留在这里作为参考
当您的操作返回时接管的AbstractController负责自动持久化。这发生在createActions和updateActions之后。但是您的重定向阻止了这种情况的发生。只需在重定向之前通过调用persistall手动合并持久化,就可以了
$this->persistenceManager->persistAll();
$this->redirect('list');
您将需要PersistenceManager的一个实例
/**
* @var \TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface
* @inject
*/
protected $persistenceManager;
编辑:我收回我在这里所说的一切。@paul beck是对的,createAction之后的重定向实际上保留了创建的对象。我确信它并不总是这样,并且在引入时在文档中找不到。我将此答案留作参考
当您的操作返回时接管的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中的调试表示该对象是“持久化实体”所以持久性管理器认为没什么可做的。在从模型中删除$uid并更新到TCA以使其与7LTS兼容后,问题就解决了
我想在模型中将$uid声明为整数并不是问题,但作为字符串对系统来说太多了。令人惊讶的是,这在TYPO3 6 LTS中起到了作用…经过一些TeamViewer调查后,我们发现问题出在模型和TCA中 该模型具有属性
protected$uid='
。当然,uid不能是字符串,也不应声明为字符串。但是,createAction中的调试表示该对象是“持久化实体”所以持久性管理器认为没什么可做的。在从模型中删除$uid并更新到TCA以使其与7LTS兼容后,问题就解决了
我想在模型中将$uid声明为整数不是问题,但是作为字符串,它对系统来说太多了。令人惊讶的是,这在TYPO3 6 LTS中工作…奇怪。您是否可以插入重定向的调试istead并发布输出,如:\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var\u dump($category);也测试了它,对象存在。在上面添加了一个屏幕截图。这可能是TCA的问题吗?@j4k3调用redirect()我猜,将调用以自动持久化所有内容。当某个操作重定向时,不需要使用PersistenceManager…如果您在操作中返回“某物”,则只需执行该操作。奇怪。是否可以插入重定向的调试istead并发布输出,如:\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var\u dump($category);也测试了它,对象存在。在上面添加了一个屏幕截图。这可能是TCA的问题吗?@j4k3调用redirect()会自动调用以持久化所有内容。我猜,当某个操作确实重定向时,不需要使用PersistenceManager…如果您在操作中返回“某物”,您只需执行该操作。