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

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

Сховати останніх авторів
Ashterix 3.1 1 {{box cssClass="floatinginfobox"}}
Ashterix 1.2 2 == (% style="display:block; margin-top:-30px; text-align:center" %)Summary(%%) ==
3
4 (% style="margin-right:auto" %)
Ashterix 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
Ashterix 1.2 12 {{/box}}
13
Ashterix 4.1 14
Ashterix 1.2 15 = Валідація вхідних параметрів =
16
Ashterix 2.1 17 Замість того, щоб перевіряти чи відповідають вимогам бізнес-лгіки параметри, що зайшли до вашого API методу, ви можете застосувати потужний механізм [[Symfony Validation>>https://symfony.com/doc/current/validation.html]], а точніше ви можете вказати вимоги до кожного параметра і RPC API Server сам провалідує вхідні дані і в разі невідповідності поверне клієнту помилку (докладніше про [[обробку помилок>>doc:docs.JsonRpcBundle.error_handling.WebHome]]).
Ashterix 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}}