Зміни в документі #[RPC\Assertions]
Остання зміна 2024/05/19 21:22 автором Ashterix
Підсумок
-
Властивості сторінки (1 змінено, 0 додано, 0 видалено)
Подробиці
- Властивості сторінки
-
- Вміст
-
... ... @@ -23,4 +23,41 @@ 23 23 24 24 = Валідація вхідних параметрів = 25 25 26 -Замість того, щоб перевіряти чи відповідають параметри, що зайшли до вашого API методу, ви можете застосувати потужний механізм [[Symfony Validation>>https://symfony.com/doc/current/validation.html]], а точніше ви можете вказати вимоги до кожного параметра і RPC Server сам провалідує вхідні дані і в разі не відповідності поверне 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}}