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

Summary

Classname

Assertions

Namespace

Ufo\RpcObject\RPC

Target

parameter

Constructor

use Symfony\Component\Validator\Constraint;

/**
 * Assertions constructor.
 *
 * @param Constraint[] $assertions
 * @param string $constructorArgs
 */
public function __construct(
    array $assertions, 
    public string $constructorArgs = ''
)
{
    // ...
}

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

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

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

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

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;  
    }  
}