Вікі-код для #[RPC\Assertions]
Показати останніх авторів
| author | version | line-number | content |
|---|---|---|---|
| 1 | {{box cssClass="floatinginfobox" width="400px"}} | ||
| 2 | == (% style="display:block; margin-top:-30px; text-align:center" %)Summary(%%) == | ||
| 3 | |||
| 4 | (% style="margin-right:auto" %) | ||
| 5 | |(% style="width:141px" %)**Classname**|(% colspan="2" rowspan="1" style="width:79px" %)((( | ||
| 6 | Assertions | ||
| 7 | ))) | ||
| 8 | |(% style="width:141px" %)**Namespace**|(% colspan="2" style="width:79px" %)((( | ||
| 9 | Ufo\RpcObject\RPC | ||
| 10 | ))) | ||
| 11 | |(% style="width:141px" %)((( | ||
| 12 | **Target** | ||
| 13 | )))|(% colspan="2" rowspan="1" style="width:79px" %)parameter | ||
| 14 | |(% colspan="3" style="width:141px" %)**Arguments:** | ||
| 15 | |(% colspan="1" rowspan="3" style="width:141px" %)((( | ||
| 16 | **$assertions** | ||
| 17 | )))|(% colspan="2" rowspan="1" style="width:79px" %)**Collection of Symfony**((( | ||
| 18 | **Constraint** | ||
| 19 | ))) | ||
| 20 | |(% style="width:79px" %)**type**|(% style="width:153px" %)array | ||
| 21 | |(% style="width:79px" %)**optional**|(% style="width:153px" %)false | ||
| 22 | {{/box}} | ||
| 23 | |||
| 24 | = Валідація вхідних параметрів = | ||
| 25 | |||
| 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}} |