【问题标题】:extbase restoring deleted object failsextbase 恢复已删除对象失败
【发布时间】:2014-02-12 14:20:21
【问题描述】:

已删除的对象(deleteAction)无法恢复(restoreAction),抛出异常:

属性路径“”的属性映射时出现异常:未找到标识为“1”的对象。

控制器:

/**
 * action delete
 *
 * @param \EXAPOINT\Exacallmanagement\Domain\Model\Calls $calls
 * @return void
 */
public function deleteAction(\EXAPOINT\Exacallmanagement\Domain\Model\Calls $calls) {
    $this->callsRepository->remove($calls);
    $this->flashMessageContainer->add('Call gelöscht.');
    $this->redirect('list');
}


/**
 * action restore
 *
 * @param \EXAPOINT\Exacallmanagement\Domain\Model\Calls $calls
 * @return void
 */
public function restoreAction(\EXAPOINT\Exacallmanagement\Domain\Model\Calls $calls) {
    $calls->setDeleted(0);
    $this->callsRepository->update($calls);
    $this->redirect('list');
}

型号:

/**
 * @var \integer
 */
protected $deleted;

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

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

问题的根源是否在于存储库没有“看到”已删除的对象?最好的方法是什么?

【问题讨论】:

    标签: controller typo3 extbase


    【解决方案1】:

    如果属性映射器无法处理已删除的对象,只需将 uid 传递给您的 restoreAction,然后

    • 检查是否存在具有该 ID 的已删除对象
    • 如果是这样,请恢复它
    • 如果没有,重定向,flashMessage,随便你

    确保您在 TCA 中配置了已删除的字段:

    'deleted' => array(
        'exclude' => 1,
        'label' => 'deleted',
        'config' => array(
            'type' => 'check',
        ),
    ),
    

    您不必将它添加到任何类型,但如果我没记错的话,字段本身必须像这样配置。

    【讨论】:

    • 你的意思是把 {callUid:calls.uid} 作为一个整数传递给控制器​​,然后通过 findByUid 获得恢复的调用吗?
    • 是的,类似的。
    • okey... 奇怪的行为,setName 有效,但 setDeleted(0) 无效,知道吗?code /** * action restore * * @param integer $callUid * @return void */公共函数 restoreAction($callUid) { $calls = $this->callsRepository->findByUid($callUid); $calls->setDeleted(0); $calls->setName('test'); $this->callsRepository->update($calls); $this->redirect('list'); }
    • 你在 tca 配置中设置了吗?
    • 设置什么?听起来对我来说是一个新的机会:)
    【解决方案2】:

    必须将存储库配置为查找由于 enableFields 而通常被忽略的实体。在您的存储库中,尝试以下操作:

    public function initializeObject() {
        $defaultQuerySettings = $this->objectManager->get('Tx_Extbase_Persistence_Typo3QuerySettings');
        $defaultQuerySettings->setRespectEnableFields(FALSE);
        $this->setDefaultQuerySettings($defaultQuerySettings);
    }
    

    【讨论】:

    • 当我添加你的建议加上 $defaultQuerySettings->setIncludeDeleted(TRUE);然后我还看到“已删除 = 1”的记录,因此 initializeObject()“有效”,但在属性路径“”的属性映射时仍然得到相同的异常:找不到身份为“1”的对象
    【解决方案3】:

    除了现有的答案:这个问题是众所周知的,这将在 TYPO3 6.2 中改变。您可以关注问题并测试 Extbase 补丁 here

    【讨论】:

    • 我刚刚尝试了 forge 中提到的新 AbstractController 但 id 没有帮助。你已经用过了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2013-02-26
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多