Signals and slots

After deserialization

Signal emitted after request payload is deserialized to objects. May be useful when it is needed e.g. to change datetime property to current or assign current TYPO3 user as an author. This signal emits two arguments:

  • operation - instance of \SourceBroker\T3api\Domain\Model\OperationInterface
  • object - object deserialized from payload

Example connection of slot to this signal can looks like one below.

\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class)->connect(
   \SourceBroker\T3api\Dispatcher\AbstractDispatcher::class,
   \SourceBroker\T3api\Dispatcher\AbstractDispatcher::SIGNAL_AFTER_DESERIALIZE_OPERATION,
   \Vendor\Extension\Slot\T3apiSlot::class,
   'afterDeserializeOperation'
);

After processing operation

Signal emitted after operation is processed and before objects are passed to serializer. This signal emits two arguments:

  • operation - instance of \SourceBroker\T3api\Domain\Model\OperationInterface
  • result - instance of resource class (entity) or, in collection GET request, instance of \SourceBroker\T3api\Response\AbstractCollectionResponse (\SourceBroker\T3api\Response\HydraCollectionResponse by default if not customized)

Example connection of slot to this signal can looks like one below.

\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class)->connect(
   \SourceBroker\T3api\Dispatcher\AbstractDispatcher::class,
   \SourceBroker\T3api\Dispatcher\AbstractDispatcher::SIGNAL_AFTER_PROCESS_OPERATION,
   \Vendor\Extension\Slot\T3apiSlot::class,
   'afterProcessOperation'
);

Customize serializer context attributes

Signal emitted during building serialization context. Useful to modify serialization context attributes (e.g. add groups which can conditionally include some properties in API response).

  • operation - immutable instance of \SourceBroker\T3api\Domain\Model\OperationInterface
  • request - immutable instance of Symfony\Component\HttpFoundation\Request
  • attributes - array with serialization context attributes which can be modified
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class)->connect(
   \SourceBroker\T3api\Serializer\ContextBuilder\ContextBuilderInterface::class,
   \SourceBroker\T3api\Serializer\ContextBuilder\ContextBuilderInterface::SIGNAL_CUSTOMIZE_SERIALIZER_CONTEXT_ATTRIBUTES,
   \Vendor\Extension\Slot\T3apiSlot::class,
   'customizeSerializerContextAttributes'
);

Before grant access

\SourceBroker\T3api\Security\FilterAccessChecker and \SourceBroker\T3api\Security\OperationAccessChecker are services used to decide if filter or operation are allowed for current request (check security documentation for more information).

There are 3 signals emitted before evaluation of security expressions. Although recommended way to register customer variables and methods is to use build-in TYPO3 mechanism to extend expression language there may be cases when slots are useful. For example: In TYPO3 < 9.4 there was no Symfony Expression Language used in TYPO3 core thus customization is possible only using these signal slots.

Note

Before using these slots consider if build-in TYPO3 mechanism to extend expression language won’t be a better solution. Keep in mind that registering variables within these slots will make it available only in t3api context while using TYPO3 mechanism makes it possible to be used also in other places (e.g. TypoScript conditions).

Signal emitted before grant operation access. Emits two arguments:

  • operation - instance of \SourceBroker\T3api\Domain\Model\OperationInterface
  • expressionLanguageVariables - array of variables passed to expression language (empty array)
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class)->connect(
   \SourceBroker\T3api\Security\OperationAccessChecker::class,
   \SourceBroker\T3api\Security\OperationAccessChecker::SIGNAL_BEFORE_IS_GRANTED,
   \Vendor\Extension\Slot\T3apiSlot::class,
   'beforeIsGranted'
);

Signal emitted before grant post denormalize operation access. Emits two arguments:

  • operation - instance of \SourceBroker\T3api\Domain\Model\OperationInterface
  • expressionLanguageVariables - array of variables passed to expression language (contains denormalized object)
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class)->connect(
   \SourceBroker\T3api\Security\OperationAccessChecker::class,
   \SourceBroker\T3api\Security\OperationAccessChecker::SIGNAL_BEFORE_IS_GRANTED_POST_DENORMALIZE,
   \Vendor\Extension\Slot\T3apiSlot::class,
   'beforeIsGrantedPostDenormalize'
);

Signal emitted before grant filter access. Emits two arguments:

  • filter - instance of \SourceBroker\T3api\Domain\Model\ApiFilter
  • expressionLanguageVariables - array of variables passed to expression language (empty array)
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class)->connect(
   \SourceBroker\T3api\Security\FilterAccessChecker::class,
   \SourceBroker\T3api\Security\FilterAccessChecker::SIGNAL_BEFORE_IS_GRANTED,
   \Vendor\Extension\Slot\T3apiSlot::class,
   'beforeIsGranted'
);