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