gpt4 book ai didi

typo3 - 已删除记录的 Extbase 属性映射

转载 作者:行者123 更新时间:2023-12-02 21:02:18 26 4
gpt4 key购买 nike

我想为创建表单构建一个预览页面。在 previewAction 中,我将记录的“已删除”属性设置为“1”,因为在 BE 中,列表模块用于批准插入的记录 - 因此,如果记录从未最终保存,则无论如何都会将其删除。

问题:我可以创建记录 (deleted=1) - 我可以跳回表单(没有历史记录,因为我必须保留创建的对象)。但如果我再次提交,属性映射会告诉我

未找到标识为“3”的 MyModel 类型的对象。

当然那是因为它被删除了。存储库中忽略已删除的设置此处不会执行操作。

是的,我可以通过手动填写所有内容来绕过 Extbase 魔法,但这不是我想要的。

这是了解我正在尝试的操作

 /**
* action preview
*
* @param MyModel
* @return void
*/
public function previewAction(MyModel $newModel)
{
//check if model was already saved
$uid = $this->request->hasArgument('uid') ? this->request->getArgument('uid') : 0;
if($uid){
$newModel = $this->myRepository->findDeletedByUid($uid);
$this->myRepository->update($newModel);
}
else{
$newModel->setDeleted(true);
$this->myRepository->add($newModel);
}

$this->view->assign('ad', $newModel);
$this->persistenceManager->persistAll();

$uid = $this->persistenceManager->getIdentifierByObject($newModel);
$this->view->assign('uid', $uid);
}

有什么想法吗?

最佳答案

Extbase 默认查询设置禁止删除对象。

由于您已经在存储库中声明了自定义查询 findDeletedByUid(),因此您只需将其设置为包含已删除的记录即可。然而,重要的是,如果您想使用该对象调用 Controller 操作,则必须在调用操作之前检索它。为此使用初始化操作。初始化将在操作之前自动调用。

如果要设置对象是否被删除,您还需要在域模型中定义属性、getter 和 setter,并在 tca 中定义适当的定义,以使数据映射器能够访问该列。

在存储库中:

public function findDeletedByUid($uid) {
$query = $this->createQuery();
$query->getQuerySettings()->setIncludeDeleted(true);
$query->matching(
$query->equals('uid',$uid)
);
return $query->execute();
}

在您的 Controller 类中:

/**
* initialize action previewAction
* Overrides the default initializeAction with one that can retrieve deleted objects
*/
public function initializePreviewAction(){
if( $this->request->hasArgument('mymodel') ){
$uid = $this->request->getArgument('mymodel');
if( $mymodel = $this->mymodelRepository->findDeletedByUid($uid) ){
$this->request->setArgument($mymodel);
} else {
// handle non retrievable object here
}
} else {
// handle missing argument here
}
}

在您的域模型中:

...
/**
* @var bool
*/
protected $deleted;

/**
* @return bool
*/
public function getDeleted() {
return $this->deleted;
}

/**
* @param bool $deleted
*/
public function setDeleted($deleted) {
$this->deleted = $deleted;
}

在你的 tca.php 中

...
'deleted' => array(
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.deleted',
'config' => array(
'type' => 'check',
),
),

关于typo3 - 已删除记录的 Extbase 属性映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37672272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com