24 lines
1.7 KiB
Markdown
24 lines
1.7 KiB
Markdown
|
## Implementing a handler
|
||
|
|
||
|
You can implement your own handler using the `RetailCrm\Api\Interfaces\HandlerInterface`.
|
||
|
`RetailCrm\Api\Handler\AbstractHandler` provides boilerplate code for the chain of responsibility.
|
||
|
`AbstractHandler::next` method will call next handler in the chain. You can safely use `return parent::next()` in your code
|
||
|
while using `AbstractHandler`.
|
||
|
|
||
|
Most of the information about how handlers operate can be found in the [chain of responsibility](https://refactoring.guru/design-patterns/chain-of-responsibility)
|
||
|
pattern explanation. There are some specific details about handlers in the client. Client will pass desired dependencies to
|
||
|
the handler if handler implements one of those interfaces:
|
||
|
|
||
|
* Any request handler
|
||
|
+ `RetailCrm\Api\Interfaces\PsrFactoriesAwareInterface` will inject PSR-17 factories into the handler.
|
||
|
* Any response handler
|
||
|
+ `RetailCrm\Api\Interfaces\SerializerAwareInterface` will inject a `liip/serializer` instance into the handler.
|
||
|
+ `RetailCrm\Api\Interfaces\ApiExceptionFactoryAwareInterface` will inject a `Liip\Serializer\SerializerInterface` instance into the handler.
|
||
|
+ `RetailCrm\Api\Interfaces\EventDispatcherAwareInterface` will inject a `Psr\EventDispatcher\EventDispatcherInterface` instance into the handler.
|
||
|
|
||
|
All of those interfaces above have the corresponding implementation traits in the `RetailCrm\Api\Traits` namespace.
|
||
|
For example, `RetailCrm\Api\Interfaces\EventDispatcherAwareInterface` implementation can be found in the
|
||
|
`RetailCrm\Api\Traits\EventDispatcherAwareTrait` trait.
|
||
|
|
||
|
Handlers can be used in the both chains just like callback handlers (see ["using a predefined hander"](using_a_predefined_handler.md)).
|