#[RPC\Assertions]

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

Summary

ClassnameAssertions
NamespaceUfo\RpcObject\RPC
Targetparameter
Arguments:
$assertionsCollection of Symfony Constraint
typearray
optionalfalse

Валідація вхідних параметрів

Замість того, щоб перевіряти чи відповідають вимогам бізнес-лгіки параметри, що зайшли до вашого API методу, ви можете застосувати потужний механізм Symfony Validation, а точніше ви можете вказати вимоги до кожного параметра і RPC API Server сам провалідує вхідні дані і в разі невідповідності поверне клієнту помилку (докладніше про обробку помилок). 

Для того, щоб скористатися цією можливістю, ви маєте додати до параметра, який хочете провалідувати, атрибут #[RPC\Assertions], який являє собою контейнер-адаптер, що передає RPC серверу ваші очікування щодо вмісту параметра.

RPC\Assertions приймає абсолютно всі класи, що наслідують Symfony Constraint, і навіть ваші власні реалізації. Перелік тих, що вже є в Symfony.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
namespace App\Api\Procedures;

use Symfony\Component\Validator\Constraints as Assert;
use Ufo\JsonRpcBundle\ApiMethod\Interfaces\IRpcService;
use Ufo\RpcObject\RPC;

class ExampleApi implements IRpcService
{
   public function sendEmail(
       #[RPC\Assertions([
           new Assert\Email(),
        ])]
        string $email,
       #[RPC\Assertions([
           new Assert\NotBlank(),
           new Assert\Length(max: 100),
        ])]
        string $subject,
       #[RPC\Assertions([
           new Assert\NotBlank(),
           new Assert\Length(min: 10),
        ])]
        string $text
    ): bool
    {
       // some logic send email
       return true;
    }
}