Вікі-код для #[RPC\Info]

Версія 3.1 додана 2024/05/10 12:12 автором Ashterix

Показати останніх авторів
1 {{box cssClass="floatinginfobox" width="400px"}}
2 == (% style="display:block; margin-top:-30px; text-align:center" %)Summary(%%) ==
3
4 (% style="margin-right:auto" %)
5 |(% style="width:141px" %)**Classname**|(% colspan="2" rowspan="1" style="width:79px" %)Info
6 |(% style="width:141px" %)**Namespace**|(% colspan="2" style="width:79px" %)(((
7 Ufo\RpcObject\RPC
8 )))
9 |(% style="width:141px" %)(((
10 **Target**
11 )))|(% colspan="2" rowspan="1" style="width:79px" %)class
12 |(% colspan="3" style="width:141px" %)**Arguments:**
13 |(% colspan="1" rowspan="3" style="width:141px" %)(((
14 **$alias**
15 )))|(% style="width:79px" %)**type**|(% style="width:153px" %)string
16 |(% style="width:79px" %)**optional**|(% style="width:153px" %)true
17 |(% style="width:79px" %)**default**|(% style="width:153px" %)null
18 |(% colspan="1" rowspan="3" style="width:141px" %)(((
19 **$concat**
20 )))|(% style="width:79px" %)**type**|(% style="width:153px" %)string
21 |(% style="width:79px" %)**optional**|(% style="width:153px" %)true
22 |(% style="width:79px" %)**default**|(% style="width:153px" %)'.'
23 {{/box}}
24 = Псевдоніми класів =
25
26 Інколи може знадобитися задати альтернативну назву для API метода, наприклад якщо у вас занадто довга назва класу, що обумовлена якимись стандатрами або домовленностями до іменувань класів в вашому проєкті.
27
28 В такому разі ви можете додати до вашого класу атрибут{{code language="none"}}#[RPC\Info]{{/code}} вказавши псевдонім для класу, це дасть вказівку RPC серверу сприймати цей псевдонім асоційовано до цього класу.
29
30 {{code language="php" layout="LINENUMBERS"}}
31 <?php
32 namespace App\Api\Procedures;
33
34 use Ufo\RpcObject\RPC;
35
36 #[RPC\Info(alias: 'users')]
37 class MySpecificApiUserServiceWithLongClassName implements IRpcService
38 {
39 public function getList(): void {}
40 }
41 {{/code}}
42
43 В такому випадку буде доступний API метод {{code language="none"}}users.getList{{/code}}.
44
45 {{warning}}
46 Зауважте, що оригінальний неймінг метод буде видалений із ServiceMap і більше не буде доступним.
47
48 Тобто //**MySpecificApiUserServiceWithLongClassName.getList**// більше не буде працювати!
49 {{/warning}}
50
51 = Символ конкатенації =
52
53 Атрибут Info також приймає другий аргумент {{code language="none"}}concat{{/code}}, який вказує символ або символи, що поєднують назву класу і назву методу при генерації ServiceMap для RPC серверу.
54
55 Значення за замовченням "." (крапка), але ви можете це легко змінити, вказавши потрібний вам символ або символи.
56
57 {{code language="php" layout="LINENUMBERS"}}
58 <?php
59 namespace App\Api\Procedures;
60
61 use Ufo\RpcObject\RPC;
62
63 #[RPC\Info(alias: 'users', concat: '>')]
64 class MySpecificApiUserServiceWithLongClassName implements IRpcService
65 {
66 public function getList(): void {}
67 }
68 {{/code}}
69
70 Приклад коду вище призведе до того, що в API буде доступний метод {{code language="none"}}users>getList{{/code}}.
71
72 = Застереження =
73
74 ЗАУВАЖТЕ, що ніякої додаткової валідації щодо використаних псевдонімів або символів конкатенації не існує, тож ваші дії можуть призвести до підміни псевдонімом іншого існуючого класу.
75
76 Наприклад в вашому додатку вже є клас {{code language="none"}}Foo{{/code}} з методом {{code language="none"}}bar{{/code}}, який доданий в API як метод {{code language="none"}}Foo.bar{{/code}}, ви створюєте клас {{code language="none"}}Baz{{/code}} (% id="cke_bm_372757S" style="display:none" %) (%%)з методом {{code language="none"}}bar{{/code}}(% id="cke_bm_372757E" style="display:none" %) (%%) і задаєте йому псевдонім {{code language="none"}}Foo{{/code}}, що призведе до
77
78 реєстрації двох API сервісів з однаковою назвою. Результат цих дій непередбачуваний.
79
80 {{error}}
81 Використовуючи цей механізм, ви дієте на свій страх і ризик!
82 {{/error}}
83
84