在Extbase中删除的ModelInstance上的deleteAction失败

时间:2012-04-26 08:15:09

标签: php extbase

例如,点击了删除链接两次或来自不同用户。虽然第一次单击将正确删除我的对象,但第二次单击将在我的deleteAction被调用之前失败(因为它已过时)。我该如何防止这种情况?

/**
 * action delete
 *
 * @param $upload
 * @dontvalidate $upload
 * @return void
 */
public function deleteAction(Tx_MyExt_Domain_Model_Upload $upload) {
    $this->uploadRepository->remove($upload);
    $this->flashMessageContainer->add('Your Upload was removed.');
    $this->redirect('list');
}

我得到一个例外:

  

值必须是“Tx_MyExt_Domain_Model_Download”类型,但类型为“NULL”。

在动作中做一些事情没有用,因为它在......之前失败了。

1 个答案:

答案 0 :(得分:0)

我假设你有一些看起来像这样的流畅标记:

<f:link.action action="delete" arguments="{upload:uploadObjectToDelete}" > ... 

其中说:当用户点击此链接时,将uploadObjectToDelete对象传递给删除操作。当用户点击该链接时,ExtBase PropertyMapper使用随链接发送的参数来定位数据库中的uploadObjectToDelete,以将其传递给控制器​​并执行删除操作。

第一次单击后,该删除操作会成功从数据库中删除该对象,并在重定向到列表操作时重新加载该页面。但是,这次uploadObjectToDelete对象为空。因此,对于第二次单击,当PropertyMapper尝试为删除操作找到upload参数时,没有要查找的对象。由于upload参数是必需的(即不能是null),因此会出现异常。

选项1

更改您的列表操作,以便在uploadObjectToDelete对象为null时不显示这些链接。这可能是最好的选择。

<f:if condition="uploadObjectToDelete">
    <f:link.action action="delete" arguments="{upload:uploadObjectToDelete}" > ... 
</f:if>

选项2

将删除操作更改为接受null参数:

public function deleteAction(Tx_MyExt_Domain_Model_Upload $upload = null) { ...

但这个选项没有意义。为什么允许用户尝试删除已经为空的对象?

这些只是建议。