Php 如何使用钩子;processDatamap“postProcFieldArray”;用打字法3
用例: 在保存对象时(在后端,可能在前端太晚),我希望在保存到数据库之前操作值 问题: 文件似乎被包括在内(如果我选择了错误的文件路径,则在保存时显示错误),但在保存对象时似乎没有执行该函数 有很多关于stackoverflow的how-tos(大多数与T4.5相关)和相关问题,但似乎没有一个适合我 环境: 类型3 6.2,Extbase 最低限度测试用例: /ext/navolspmanager/ext_localconf.phpPhp 如何使用钩子;processDatamap“postProcFieldArray”;用打字法3,php,typo3,extbase,typo3-6.2.x,Php,Typo3,Extbase,Typo3 6.2.x,用例: 在保存对象时(在后端,可能在前端太晚),我希望在保存到数据库之前操作值 问题: 文件似乎被包括在内(如果我选择了错误的文件路径,则在保存时显示错误),但在保存对象时似乎没有执行该函数 有很多关于stackoverflow的how-tos(大多数与T4.5相关)和相关问题,但似乎没有一个适合我 环境: 类型3 6.2,Extbase 最低限度测试用例: /ext/navolspmanager/ext_localconf.php $GLOBALS['TYPO3_CONF_VARS']['SC
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] =
'EXT:navolspmanager/Classes/Hooks/GetGeoCodesHook.php:\NachVORNE\Navolspmanager\Hooks\GetGeoCodesHook';
升级以供参考:必须更改最后一行以解决问题
/ext/navolspmanager/Classes/Hooks/getgeocodeshake.php
<?php
namespace NachVORNE\Navolspmanager\Hooks;
class GetGeoCodesHook {
public function processDatamap_preProcessFieldArray( array $fieldArray, $table, $id, \TYPO3\CMS\Core\DataHandling\DataHandler &$pObj ) {
if ($table == 'tx_navolspmanager_domain_model_dataset') {
$fieldArray['geolng'] = 01.001; // for testing purposes
var_dump($fieldArray); die();
}
else{
var_dump($table); die();
}
}
}
已解决:
在我的ext_localconf.php中,名称空间中只缺少一个“/”
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] =
'EXT:navolspmanager/Classes/Hooks/GetGeoCodesHook.php:\NachVORNE\Navolspmanager\Hooks\GetGeoCodesHook';
改进:
当根据其他用户输入更新一个字段时,我们应该使用“processDatamap\u postProcessFieldArray”函数。这样,我们在grep输入时就已经完成了trim、date和number等操作。如果您的扩展结构符合建议的默认值(因此在您的示例中,您的类将位于EXT:yourext/Classes/Hooks/getgeocodeshake.php
),你根本不需要指明钩子的路径,但可以依赖于自动加载。谢谢@lorenz的评论