Tôi có một tiện ích mở rộng Extbase hoạt động trong TYPO3 V6.2, lưu trữ Sản phẩm. Bây giờ tôi muốn tìm hiểu về cách sử dụng Signal/Slot (biến thể Extbase của Hooks). Tôi tự hỏi tại sao ví dụ này không hiệu quả. Khi tôi cập nhật một sản phẩm trong mô-đun Danh sách trong Phụ lục TYPO3, nó sẽ lưu chính xác nhưng không có thông báo nào xuất hiện.TYPO3 Extbase - cách sử dụng Tín hiệu/Slots lõi
file 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
);
file typo3conf/ext/myext/Dịch vụ/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();
}
}
}
Cập nhật 15.06 .2015
Một gợi ý từ Patrick Lobacher nhận xét, rằng chúng ta không thể sử dụng die() trong bối cảnh này. Thay vào đó, chúng ta nên viết một logfile. Nhưng điều đó cũng không hiệu quả với tôi. Không có tập tin đã được viết:
file 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);
});
Cập nhật 29.06.2015
On https://forge.typo3.org/issues/61979 Francois đã viết, rằng "Object Manager có thể chỉ được sử dụng trong Extbase Context, không phải trong ext_localconf.php ". Tuy nhiên, câu trả lời nhất định thậm chí không làm việc cho tôi. Nhưng có lẽ nó giúp người khác.
Về móc, tín hiệu và khe cắm, gần đây tôi đã viết một hướng dẫn ngắn: https://usetypo3.com/signals-and-hooks-in-typo3.html – Daniel