gpt4 book ai didi

TYPO3 Extbase 后端删除对象的单独代码

转载 作者:行者123 更新时间:2023-12-04 21:56:14 25 4
gpt4 key购买 nike

当我的 Extbase 域对象之一从 TYPO3 后端的 ListView 中删除时,我想执行一些单独的代码。

认为它可以通过覆盖相应存储库中的 remove( $o ) 方法来工作,例如

 public function remove( $object ) {
parent::__remove( $object );
do_something_i_want();
}

,但我猜这行不通。看起来存储库方法仅由我的扩展程序的操作调用/使用(例如,如果我在 FE 或 BE 插件中有一些删除操作)而不是当对象刚刚从后端的 ListView 中删除时?我不使用(到目前为止)任何 FE/BE-plugin/-actions - 仅在我的存储文件夹的后端 ListView 中使用简单的添加/编辑/删除功能。

背景:我有例如两个具有 1:n 关系的模型(比如 singersong),其中一个对象包含一些上传的文件(album_cover > 指向/uploads/myext/ 文件夹中文件的 URL);使用 @cascade 可以很好地删除属于已删除的 singer 的每个 song,但它不会触及上传的文件(仅)对于 song.album_cover - 随着时间的推移会导致相当多的浪费。所以我想做一些 onDeletionOfSinger() { deleteAllFilesForHisSongs(); }-东西。(同样的情况也适用于删除单个 song 和它的 album_cover-file。)

听起来很简单也很常见,但我只是不支持它,发现没有任何有用的东西 - 会喜欢一些提示/指向正确的方向:-)。

最佳答案

ListView 在其操作过程中使用 TCEmain 钩子(Hook),因此您可以使用其中一个钩子(Hook)来交叉删除操作,即:processCmdmap_deleteAction

  1. typo3conf/ext/your_ext/ext_tables.php 中注册你的钩子(Hook)类

    $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass'][] = 'VENDORNAME\\YourExt\\Hooks\\ProcessCmdmap';
  2. 创建一个具有有效命名空间和路径的类(根据上一步)
    文件:typo3conf/ext/your_ext/Classes/Hooks/ProcessCmdmap.php

    <?php
    namespace VENDORNAME\YourExt\Hooks;

    class ProcessCmdmap {
    /**
    * hook that is called when an element shall get deleted
    *
    * @param string $table the table of the record
    * @param integer $id the ID of the record
    * @param array $record The accordant database record
    * @param boolean $recordWasDeleted can be set so that other hooks or
    * @param DataHandler $tcemainObj reference to the main tcemain object
    * @return void
    */
    function processCmdmap_postProcess($command, $table, $id, $value, $dataHandler) {
    if ($command == 'delete' && $table == 'tx_yourext_domain_model_something') {
    // Perform something before real delete
    // You don't need to delete the record here it will be deleted by CMD after the hook
    }
    }
    }
  3. 注册新的钩子(Hook)类后不要忘记清除系统缓存

关于TYPO3 Extbase 后端删除对象的单独代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25591992/

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