← Валідація вхідних параметрів
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
+
```