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

Версія 2.1 додана 2024/05/10 14:59 автором 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" %)(((
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}}