Зміни в документі #[RPC\Info]

Остання зміна 2024/05/19 21:26 автором Ashterix

Від версії 1.4
редаговано Ashterix
дата 2024/05/10 11:54
Змінити коментар: Немає коментарів для цієї версії
До версії 1.5
редаговано Ashterix
дата 2024/05/10 12:08
Змінити коментар: Немає коментарів для цієї версії

Підсумок

Подробиці

Властивості сторінки
Вміст
... ... @@ -1,5 +1,5 @@
1 1  {{box cssClass="floatinginfobox" width="400px"}}
2 -== (% style="text-align:center" %)Summary(%%) ==
2 +== (% style="display:block; margin-top:-30px; text-align:center" %)Summary(%%) ==
3 3  
4 4  (% style="margin-right:auto" %)
5 5  |(% style="width:141px" %)**Classname**|(% colspan="2" rowspan="1" style="width:79px" %)Info
... ... @@ -20,10 +20,10 @@
20 20  )))|(% style="width:79px" %)**type**|(% style="width:153px" %)string
21 21  |(% style="width:79px" %)**optional**|(% style="width:153px" %)true
22 22  |(% style="width:79px" %)**default**|(% style="width:153px" %)'.'
23 -
24 -
25 25  {{/box}}
26 26  
25 += Псевдоніми класів =
26 +
27 27  Інколи може знадобитися задати альтернативну назву для API метода, наприклад якщо у вас занадто довга назва класу, що обумовлена якимись стандатрами або домовленностями до іменувань класів в вашому проєкті.
28 28  
29 29  В такому разі ви можете додати до вашого класу атрибут{{code language="none"}}#[RPC\Info]{{/code}} вказавши псевдонім для класу, це дасть вказівку RPC серверу сприймати цей псевдонім асоційовано до цього класу.
... ... @@ -49,4 +49,37 @@
49 49  Тобто MySpecificApiUserServiceWithLongClassName.getList більше не буде працювати!
50 50  {{/warning}}
51 51  
52 += Символ конкатенації =
53 +
54 +Атрибут Info також приймає другий аргумент {{code language="none"}}concat{{/code}}, який вказує символ або символи, що поєднують назву класу і назву методу при генерації ServiceMap для RPC серверу.
55 +
56 +Значення за замовченням "." (крапка), але ви можете це легко змінити, вказавши потрібний вам символ або символи.
57 +
58 +{{code language="php" layout="LINENUMBERS"}}
59 +<?php
60 +namespace App\Api\Procedures;
61 +
62 +use Ufo\RpcObject\RPC;
63 +
64 +#[RPC\Info(alias: 'users', concat: '>')]
65 +class MySpecificApiUserServiceWithLongClassName implements IRpcService
66 +{
67 + public function getList(): void {}
68 +}
69 +{{/code}}
70 +
71 +Приклад коду вище призведе до того, що в API буде доступний метод {{code language="none"}}users>getList{{/code}}.
72 +
73 += Застереження =
74 +
75 +ЗАУВАЖТЕ, що ніякої додаткової валідації щодо використаних псевдонімів або символів конкатенації не існує, тож ваші дії можуть призвести до підміни псевдонімом іншого існуючого класу.
76 +
77 +Наприклад в вашому додатку вже є клас {{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}}, що призведе до
78 +
79 +реєстрації двох API сервісів з однаковою назвою. Результат цих дій непередбачуваний.
80 +
81 +{{error}}
82 +Використовуючи цей механізм, ви дієте на свій страх і ризик!
83 +{{/error}}
84 +
52 52