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

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

Від версії 1.1
редаговано Ashterix
дата 2024/05/10 11:15
Змінити коментар: Немає коментарів для цієї версії
До версії 3.1
редаговано Ashterix
дата 2024/05/19 21:03
Змінити коментар: Немає коментарів для цієї версії

Підсумок

Подробиці

Властивості сторінки
Вміст
... ... @@ -1,0 +1,63 @@
1 +{{box cssClass="floatinginfobox"}}
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" %)(((
6 +Assertions
7 +)))
8 +|(% style="width:141px" %)**Namespace**|(% colspan="2" style="width:79px" %)(((
9 +Ufo\RpcObject\RPC
10 +)))
11 +|(% style="width:141px" %)(((
12 +**Target**
13 +)))|(% colspan="2" rowspan="1" style="width:79px" %)parameter
14 +|(% colspan="3" style="width:141px" %)**Arguments:**
15 +|(% colspan="1" rowspan="3" style="width:141px" %)(((
16 +**$assertions**
17 +)))|(% colspan="2" rowspan="1" style="width:79px" %)**Collection of Symfony**(((
18 +**Constraint**
19 +)))
20 +|(% style="width:79px" %)**type**|(% style="width:153px" %)array
21 +|(% style="width:79px" %)**optional**|(% style="width:153px" %)false
22 +{{/box}}
23 +
24 += Валідація вхідних параметрів =
25 +
26 +Замість того, щоб перевіряти чи відповідають вимогам бізнес-лгіки параметри, що зайшли до вашого API методу, ви можете застосувати потужний механізм [[Symfony Validation>>https://symfony.com/doc/current/validation.html]], а точніше ви можете вказати вимоги до кожного параметра і RPC API Server сам провалідує вхідні дані і в разі невідповідності поверне клієнту помилку (докладніше про [[обробку помилок>>doc:docs.JsonRpcBundle.error_handling.WebHome]]).
27 +
28 +Для того, щоб скористатися цією можливістю, ви маєте додати до параметра, який хочете провалідувати, атрибут #{{code language="none"}}[RPC\Assertions]{{/code}}, який являє собою контейнер-адаптер, що передає RPC серверу ваші очікування щодо вмісту параметра.
29 +
30 +{{code language="none"}}RPC\Assertions{{/code}} приймає абсолютно всі класи, що наслідують {{code language="none"}}Symfony Constraint{{/code}}, і навіть ваші власні реалізації. [[Перелік тих, що вже є в Symfony>>https://symfony.com/doc/current/validation.html#supported-constraints]].
31 +
32 +{{code language="php" layout="LINENUMBERS"}}
33 +<?php
34 +namespace App\Api\Procedures;
35 +
36 +use Symfony\Component\Validator\Constraints as Assert;
37 +use Ufo\JsonRpcBundle\ApiMethod\Interfaces\IRpcService;
38 +use Ufo\RpcObject\RPC;
39 +
40 +class ExampleApi implements IRpcService
41 +{
42 + public function sendEmail(
43 + #[RPC\Assertions([
44 + new Assert\Email(),
45 + ])]
46 + string $email,
47 + #[RPC\Assertions([
48 + new Assert\NotBlank(),
49 + new Assert\Length(max: 100),
50 + ])]
51 + string $subject,
52 + #[RPC\Assertions([
53 + new Assert\NotBlank(),
54 + new Assert\Length(min: 10),
55 + ])]
56 + string $text
57 + ): bool
58 + {
59 + // some logic send email
60 + return true;
61 + }
62 +}
63 +{{/code}}