当我从TYPO3后端的列表视图中删除一个Extbase域对象时,我想执行一些单独的代码.
认为它可以/将通过覆盖remove( $o )相应的存储库中的方法来工作
public function remove( $object ) {
parent::__remove( $object );
do_something_i_want();
}
Run Code Online (Sandbox Code Playgroud)
,但我认为这不会奏效.看起来存储库方法只被我的扩展操作调用/使用(例如,如果我在FE或BE插件中有一些删除操作),而不是在后端的列表视图中删除对象时?我不使用(到现在为止)任何FE/BE-plugin/-actions - 只在我的存储文件夹的后端列表视图中使用简单的添加/编辑/删除功能.
背景:我有两个模型,有一些1:n关系(比如说singer和song),其中一个对象包含一些上传的文件(album_cover>指向文件/uploads/myext/夹中的文件的URL ); 使用@cascade正常工作删除每个song属于singer被删除的,但它不会触及上传的文件(仅)song.album_cover- 随着时间的推移导致相当多的浪费.所以我很想做某种onDeletionOfSinger() { deleteAllFilesForHisSongs(); }事情.(同样的事情适用于删除let,例如单个song和它的album_cover文件.)
听起来很简单和常见,但我只是不落后于它并发现没什么用处 - 会喜欢暗示/指向正确的方向:-).
列表视图在其操作期间使用TCEmain挂钩,因此您可以使用其中一个挂钩删除操作,即: processCmdmap_deleteAction
注册你的钩子类 typo3conf/ext/your_ext/ext_tables.php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass'][] = 'VENDORNAME\\YourExt\\Hooks\\ProcessCmdmap';
Run Code Online (Sandbox Code Playgroud)创建一个具有有效命名空间和路径(根据上一步)
文件的类: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
}
}
}
Run Code Online (Sandbox Code Playgroud)注册新的hook类后,不要忘记清除系统缓存
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |