Події буди додані в JsonRpcBundle з версії 7.0.
Відтепер компоненти життєвого циклу RPC серверу працюють через події і ви маєте можливість на них підписатися, щоб зробити його роботу більш гнучкою.
Використання подій потребує від вас певних знань і вмінь, певні ваші дії під час підписки на події можуть призвести до неочікуваних результатів, тому ви використовуєте події на свій страх і ризик
Перелік подій
RPC сервер під час свого життєвого циклу використовує власні події, що базуються на Symfony Event
| Подія | Клас | Опис |
|---|---|---|
| rpc.request | RpcRequestEvent |
Відбувається при отриманні RPC запиту. Використовуйте цю подію для перевірки або модифікації запиту перед його обробкою. |
| rpc.pre_execute | RpcPreExecuteEvent |
Відбувається перед виконанням RPC методу. Використовуйте цю подію для підготовки або модифікації викликів перед їх виконанням. |
| rpc.post_execute | RpcPostExecuteEvent |
Відбувається після виконання RPC методу. Ви можете використовувати цю подію для обробки результатів або виконання дій після завершення виклику методу. |
| rpc.response | RpcResponseEvent |
Відбувається перед відправкою RPC відповіді. Використовуйте цю подію для перевірки або модифікації відповідей перед їх відправкою клієнту. |
| rpc.error | RpcErrorEvent |
Відбувається при виникненні помилки під час обробки RPC запиту. Ви можете використовувати її для обробки помилок або виконання дій у випадку помилки. |
| rpc.async_request | RpcAsyncRequestEvent |
Відбувається при отриманні асинхронного RPC запиту. Використовуйте її для обробки або модифікації асинхронних запитів перед їх виконанням. |
| rpc.async_output | RpcAsyncOutputEvent |
Відбувається при відправці асинхронної відповіді. Ви можете використовувати її для перевірки або модифікації асинхронних відповідей перед їх відправкою. |
Підписка на події за допомогою Symfony лістенерів
Для підписки на ці події, ви можете створити Symfony лістенери. Приклад базового лістенера виглядає наступним чином:
Приклад власного підписника на події
<?php
namespace App\EventListener;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
use Ufo\JsonRpcBundle\Event\RpcRequestEvent;
use Ufo\JsonRpcBundle\Event\RpcEvent;
#[AsEventListener(event: RpcEvent::REQUEST, method: 'onRpcRequest')]
class RpcEventListener
{
public function onRpcRequest(RpcRequestEvent $event): void
{
// your own event handler
}
}
Після створення лістенера, він автоматично зареєструється завдяки атрибутам. Для більш детальної інформації дивіться документацію Symfony щодо подій: Symfony Event System
Це дозволить вашому лістенеру підписуватися на події і виконувати відповідні дії під час життєвого циклу RPC сервера.