我在TYPO3 V6.2中有一个可用的Extbase扩展,它存储产品。 现在我想学习如何使用Signal/Slot(Extbase的Hooks变体)。 我想知道为什么示例无法正常工作。 当我在TYPO3后端的List模块中更新产品时,它可以正确保存但没有显示任何消息。
文件typo3conf/ext/myext/ext_localconf.php
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance( 'TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher' );
$signalSlotDispatcher->connect(
'TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Backend',
'afterUpdateObject',
'MyVendor\\MyExt\\Service\\Signalservice',
'myAfterUpdate',
FALSE
);
文件 typo3conf/ext/myext/Service/Signalservice.php
。namespace MyVendor\MyExt\Service;
class Signalservice implements \TYPO3\CMS\Core\SingletonInterface {
/**
* @param \TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface $object
*/
public function myAfterUpdate(\TYPO3\CMS\Extbase\DomainObject\DomainObjectInterface $object){
if ($object instanceof \MyVendor\MyExt\Domain\Model\Products) {
// check if we come to this point
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump('Successfully hooked - I am a slot.');
die();
}
}
}
2015年6月15日更新
来自Patrick Lobacher的提示指出,在这种情况下我们不能使用die()。相反,我们应该编写一个日志文件。但是这对我也不起作用。没有文件被写入:
文件typo3conf/ext/myext/ext_localconf.php
/**
* @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher
* */
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager')->get('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher');
$signalSlotDispatcher->connect(
'TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Backend',
'afterUpdateObject',
function ($payload) {
$logfile = "fileadmin/test/logfile.txt";
$handle = fopen($logfile, "a+");
fwrite ($handle, 'Hi. I was written by ext_localconf.php. ' . time());
fclose ($handle);
});
更新于2015年6月29日
在https://forge.typo3.org/issues/61979上,Francois写道,“Object Manager只能在Extbase上下文中使用,不能在ext_localconf.php中使用”。
然而,即使给出的答案对我也不起作用。但或许对其他人有帮助。