Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 后端扩展的typo3 createAction不保留数据_Php_Typo3_Typo3 6.2.x_Typo3 7.6.x - Fatal编程技术网

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

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') { $

我正在从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');
}
它说一切正常,但不能持久化数据。有什么问题吗

当我将记录手动添加到数据库时,它也不会显示:(

更新出变量转储 编辑:我收回我在这里所说的一切。@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…如果您在操作中返回“某物”,您只需执行该操作。