Остання зміна 2024/07/11 12:22 автором Ashterix

Показати останніх авторів
1 {{box cssClass="floatinginfobox" title="**Зміст**"}}
2 {{toc/}}
3 {{/box}}
4
5 {{info}}
6 Події буди додані в JsonRpcBundle з версії 7.0.
7 Відтепер компоненти життєвого циклу RPC серверу працюють через події і ви маєте можливість на них підписатися, щоб зробити його роботу більш гнучкою.
8 {{/info}}
9
10 {{warning}}
11 Використання подій потребує від вас певних знань і вмінь, певні ваші дії під час підписки на події можуть призвести до неочікуваних результатів, тому ви використовуєте події на свій страх і ризик
12 {{/warning}}
13
14 == Перелік подій ==
15
16 RPC сервер під час свого життєвого циклу використовує власні події, що базуються на [[Symfony Event>>https://symfony.com/doc/current/event_dispatcher.html]]
17
18 (% id="event_table" %)
19 |= Подія |= Опис |
20 |(((
21 **rpc.request**
22
23 {{{class RpcRequestEvent}}}
24 )))|(((
25 Відбувається при отриманні RPC запиту. Використовуйте цю подію для перевірки або модифікації запиту перед його обробкою.
26 )))|
27 |(((
28 **rpc.pre_execute**
29
30 {{{class RpcPreExecuteEvent}}}
31 )))|(((
32 Відбувається перед виконанням RPC методу. Використовуйте цю подію для підготовки або модифікації викликів перед їх виконанням.
33 )))|
34 |(((
35 **rpc.post_execute**
36
37 {{{class RpcPostExecuteEvent}}}
38 )))|Відбувається після виконання RPC методу. Ви можете використовувати цю подію для обробки результатів або виконання дій після завершення виклику методу. |
39 |(((
40 **rpc.response**
41
42 {{{class RpcResponseEvent}}}
43 )))|Відбувається перед відправкою RPC відповіді. Використовуйте цю подію для перевірки або модифікації відповідей перед їх відправкою клієнту. |
44 |(((
45 **rpc.error**
46
47 {{{class RpcErrorEvent}}}
48 )))|Відбувається при виникненні помилки під час обробки RPC запиту. Ви можете використовувати її для обробки помилок або виконання дій у випадку помилки. |
49 |(((
50 **rpc.async_request**
51
52 {{{class RpcAsyncRequestEvent}}}
53 )))|Відбувається при отриманні асинхронного RPC запиту. Використовуйте її для обробки або модифікації асинхронних запитів перед їх виконанням. |
54 |(((
55 **rpc.async_output**
56
57 {{{class RpcAsyncOutputEvent}}}
58 )))|Відбувається при відправці асинхронної відповіді. Ви можете використовувати її для перевірки або модифікації асинхронних відповідей перед їх відправкою. |
59
60 == Підписка на події за допомогою Symfony лістенерів ==
61
62 Для підписки на ці події, ви можете створити Symfony лістенери. Приклад базового лістенера виглядає наступним чином:
63
64 {{code language="php" layout="LINENUMBERS" title="Приклад власного підписника на події"}}
65 <?php
66
67 namespace App\EventListener;
68
69 use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
70 use Ufo\JsonRpcBundle\Event\RpcRequestEvent;
71 use Ufo\JsonRpcBundle\Event\RpcEvent;
72
73 #[AsEventListener(event: RpcEvent::REQUEST, method: 'onRpcRequest')]
74 class RpcEventListener
75 {
76 public function onRpcRequest(RpcRequestEvent $event): void
77 {
78 // your own event handler
79 }
80 }
81 {{/code}}
82
83 Після створення лістенера, він автоматично зареєструється завдяки атрибутам. Для більш детальної інформації дивіться документацію Symfony щодо подій: [[Symfony Event System>>https://symfony.com/doc/current/event_dispatcher.html]]
84
85 Це дозволить вашому лістенеру підписуватися на події і виконувати відповідні дії під час життєвого циклу RPC сервера.