Валідація вхідних параметрів

← Валідація вхідних параметрів

Ashterix

init

uk/docs/api/json-rpc-bundle/add_rpc_service/assertions.md новий файл +103 −0

1 + ## Summary
2 +
3 + <block class='floatinginfobox'>
4 +
5 + <columns border="1" zebra="1">
6 + <col width="40%">
7 +
8 + **Classname**
9 + </col>
10 + <col>
11 + `Assertions`
12 + </col>
13 + </row>
14 + <col width="40%">
15 +
16 + **Namespace**
17 + </col>
18 + <col>
19 +
20 + `Ufo\RpcObject\RPC`
21 + </col>
22 + </row>
23 + <col width="40%">
24 +
25 + **Target**
26 + </col>
27 + <col>
28 +
29 + `parameter`
30 + </col>
31 + </columns>
32 +
33 + <columns border="1" zebra="1">
34 + <col align="center">
35 + Constructor
36 + </col>
37 + </row>
38 + <col>
39 +
40 + ```php
41 + use Symfony\Component\Validator\Constraint;
42 +
43 + /**
44 + * Assertions constructor.
45 + *
46 + * @param Constraint[] $assertions
47 + * @param string $constructorArgs
48 + */
49 + public function __construct(
50 + array $assertions,
51 + public string $constructorArgs = ''
52 + )
53 + {
54 + // ...
55 + }
56 + ```
57 +
58 + </col>
59 + </columns>
60 +
61 + </block>
62 +
63 +
64 + # Валідація вхідних параметрів
65 +
66 + Замість того, щоб перевіряти чи відповідають вимогам бізнес-логіки параметри, що зайшли до вашого API методу, ви можете застосувати потужний механізм [Symfony Validation](https://symfony.com/doc/current/validation.html), а точніше ви можете вказати вимоги до кожного параметру і RPC API Server сам провалідує вхідні дані, а в разі невідповідності поверне клієнту помилку (докладніше про [обробку помилок](/docs/json-rpc-bundle/error_handling/)).
67 +
68 + Для того, щоб скористатися цією можливістю, ви маєте додати до параметра, який хочете провалідувати, атрибут `#[RPC\Assertions]`, який являє собою контейнер-адаптер, що передає RPC серверу ваші очікування щодо вмісту параметра.
69 +
70 + `RPC\Assertions` приймає абсолютно всі класи, що наслідують Symfony Constraint, і навіть ваші власні реалізації. [Перелік тих, що вже є в Symfony](https://symfony.com/doc/current/validation.html#supported-constraints).
71 +
72 +
73 + ```php
74 + namespace App\Api\Procedures;
75 +
76 + use Symfony\Component\Validator\Constraints as Assert;
77 + use Ufo\JsonRpcBundle\ApiMethod\Interfaces\IRpcService;
78 + use Ufo\RpcObject\RPC;
79 +
80 + class ExampleApi implements IRpcService
81 + {
82 + public function sendEmail(
83 + #[RPC\Assertions([
84 + new Assert\Email(),
85 + ])]
86 + string $email,
87 + #[RPC\Assertions([
88 + new Assert\NotBlank(),
89 + new Assert\Length(max: 100),
90 + ])]
91 + string $subject,
92 + #[RPC\Assertions([
93 + new Assert\NotBlank(),
94 + new Assert\Length(min: 10),
95 + ])]
96 + string $text
97 + ): bool
98 + {
99 + // some logic send email
100 + return true;
101 + }
102 + }
103 + ```