{"id":29432,"date":"2023-07-06T10:17:45","date_gmt":"2023-07-06T06:47:45","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/validando-requests-no-symfony-framework-4fi7\/"},"modified":"2023-07-06T10:17:45","modified_gmt":"2023-07-06T06:47:45","slug":"validando-requests-no-symfony-framework-4fi7","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/validando-requests-no-symfony-framework-4fi7\/","title":{"rendered":"Validando \u0647\u06cc\u0686 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 Symfony \u0631\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0646\u0645\u06cc \u06a9\u0646\u062f"},"content":{"rendered":"<div data-article-id=\"1527539\" id=\"article-body\">\n<p>\u0627\u0645\u0631\u0648\u0632\u0647 Symfony \u06cc\u06a9\u06cc \u0627\u0632 \u0628\u0627\u0644\u063a \u062a\u0631\u06cc\u0646 \u0648 \u0642\u0648\u06cc \u062a\u0631\u06cc\u0646 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0628\u0627\u0632\u0627\u0631 \u0627\u0633\u062a \u0648 \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u062f\u0631 \u0686\u0646\u062f\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0627\u0632 \u062c\u0645\u0644\u0647 \u0627\u06cc\u062c\u0627\u062f API \u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.  Symfony \u0627\u062e\u06cc\u0631\u0627\u064b \u0686\u0646\u062f\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u062c\u0627\u0644\u0628 \u0631\u0627 \u0634\u0627\u0645\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0642\u0627\u0628\u0644\u06cc\u062a \u0646\u06af\u0627\u0634\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0628\u0647 \u06cc\u06a9 \u0634\u06cc\u060c \u06a9\u0647 \u062f\u0631 \u0646\u0633\u062e\u0647 6.3 \u0638\u0627\u0647\u0631 \u0634\u062f.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u0627 \u0627\u0632 \u0628\u0631\u062e\u06cc \u0627\u0632 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0622\u062e\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc PHP\u060c \u06a9\u0647 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627 \u0648 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0641\u0642\u0637 \u062e\u0648\u0627\u0646\u062f\u0646\u06cc \u0648 \u0627\u06cc\u062c\u0627\u062f \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0628\u0631\u0627\u06cc Requests \u062f\u0631 Symfony \u0627\u0633\u062a\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0632 \u0645\u0624\u0644\u0641\u0647 Symfony Validation \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/validando-requests-no-symfony-framework-4fi7\/#%D8%AD%D9%88%D8%B5%D9%84%D9%87_%D8%A7%D9%85_%D8%AA%D9%85%D8%A7%D9%85_%D8%B4%D8%AF%D9%87_%D8%A7%D8%B3%D8%AA%D8%8C_%D8%B1%D9%85%D8%B2_%D8%B1%D8%A7_%D8%A8%D9%87_%D9%85%D9%86_%D9%86%D8%B4%D8%A7%D9%86_%D8%AF%D9%87%DB%8C%D8%AF\" >\u062d\u0648\u0635\u0644\u0647 \u0627\u0645 \u062a\u0645\u0627\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0631\u0645\u0632 \u0631\u0627 \u0628\u0647 \u0645\u0646 \u0646\u0634\u0627\u0646 \u062f\u0647\u06cc\u062f!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/validando-requests-no-symfony-framework-4fi7\/#%D9%85%D8%AB%D8%A7%D9%84_%D8%A7%D8%B3%D8%A7%D8%B3%DB%8C\" >\u0645\u062b\u0627\u0644 \u0627\u0633\u0627\u0633\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/validando-requests-no-symfony-framework-4fi7\/#%DA%A9%D9%84%D8%A7%D8%B3_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%DA%86%DA%A9%DB%8C%D8%AF%D9%87\" >\u06a9\u0644\u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0686\u06a9\u06cc\u062f\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/validando-requests-no-symfony-framework-4fi7\/#%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%DA%A9%D9%84%D8%A7%D8%B3_%D8%A8%D8%A7_%D9%88%DB%8C%DA%98%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%B3%D9%86%D8%AC%DB%8C\" >\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0644\u0627\u0633 \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/validando-requests-no-symfony-framework-4fi7\/#%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_%DA%A9%D9%84%D8%A7%D8%B3_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D8%AF%D8%B1_Route\" >\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0631 Route<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/validando-requests-no-symfony-framework-4fi7\/#%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C_%D8%A7%DB%8C%D9%86_%D8%B1%D9%88%DB%8C%DA%A9%D8%B1%D8%AF\" >\u0645\u0632\u0627\u06cc\u0627\u06cc \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/validando-requests-no-symfony-framework-4fi7\/#%D8%B2%D9%85%D8%A7%D9%86_%D8%AA%D8%B3%D8%AA\" >\u0632\u0645\u0627\u0646 \u062a\u0633\u062a!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/validando-requests-no-symfony-framework-4fi7\/#%D9%85%D8%AD%D8%AF%D9%88%D8%AF%DB%8C%D8%AA_%D9%87%D8%A7\" >\u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0647\u0627<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AD%D9%88%D8%B5%D9%84%D9%87_%D8%A7%D9%85_%D8%AA%D9%85%D8%A7%D9%85_%D8%B4%D8%AF%D9%87_%D8%A7%D8%B3%D8%AA%D8%8C_%D8%B1%D9%85%D8%B2_%D8%B1%D8%A7_%D8%A8%D9%87_%D9%85%D9%86_%D9%86%D8%B4%D8%A7%D9%86_%D8%AF%D9%87%DB%8C%D8%AF\"><\/span>\n<p>  \u062d\u0648\u0635\u0644\u0647 \u0627\u0645 \u062a\u0645\u0627\u0645 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0631\u0645\u0632 \u0631\u0627 \u0628\u0647 \u0645\u0646 \u0646\u0634\u0627\u0646 \u062f\u0647\u06cc\u062f!<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062e\u0648\u0628 \u062e\u0648\u0628!  \u062f\u0631 \u0635\u0648\u0631\u062a\u06cc \u06a9\u0647 \u062d\u0648\u0635\u0644\u0647 \u0645\u0637\u0627\u0644\u0639\u0647 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0631\u0627 \u0646\u062f\u0627\u0631\u06cc\u062f \u0645\u0646 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u062f\u0631 \u0644\u06cc\u0646\u06a9 \u0632\u06cc\u0631 \u062f\u0627\u0631\u0645.<\/p>\n<p>https:\/\/github.com\/joubertredrat\/symfony-request-validator<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%AB%D8%A7%D9%84_%D8%A7%D8%B3%D8%A7%D8%B3%DB%8C\"><\/span>\n<p>  \u0645\u062b\u0627\u0644 \u0627\u0633\u0627\u0633\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u062e\u0648\u062f \u0645\u0633\u062a\u0646\u062f\u0627\u062a\u060c \u0641\u0642\u0637 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u062a\u0631\u0633\u06cc\u0645 \u0645\u0642\u0627\u062f\u06cc\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0645\u0627\u0646\u0646\u062f \u0645\u062b\u0627\u0644 \u0632\u06cc\u0631.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">declare<\/span><span class=\"p\">(<\/span><span class=\"n\">strict_types<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\n\n<span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Dto<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kn\">use<\/span> <span class=\"nc\">App\\Validator\\CreditCard<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Validator\\Constraints\\NotBlank<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Validator\\Constraints\\Positive<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Validator\\Constraints\\Range<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Validator\\Constraints\\Type<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">CreateTransactionDto<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span>\n        <span class=\"c1\">#[NotBlank(message: 'I dont like this field empty')]<\/span>\n        <span class=\"c1\">#[Type('string')]<\/span>\n        <span class=\"k\">public<\/span> <span class=\"k\">readonly<\/span> <span class=\"kt\">string<\/span> <span class=\"nv\">$firstName<\/span><span class=\"p\">,<\/span>\n\n        <span class=\"c1\">#[NotBlank(message: 'I dont like this field empty')]<\/span>\n        <span class=\"c1\">#[Type('string')]<\/span>\n        <span class=\"k\">public<\/span> <span class=\"k\">readonly<\/span> <span class=\"kt\">string<\/span> <span class=\"nv\">$lastName<\/span><span class=\"p\">,<\/span>\n\n        <span class=\"c1\">#[NotBlank()]<\/span>\n        <span class=\"c1\">#[Type('string')]<\/span>\n        <span class=\"c1\">#[CreditCard()]<\/span>\n        <span class=\"k\">public<\/span> <span class=\"k\">readonly<\/span> <span class=\"kt\">string<\/span> <span class=\"nv\">$cardNumber<\/span><span class=\"p\">,<\/span>\n\n        <span class=\"c1\">#[NotBlank()]<\/span>\n        <span class=\"c1\">#[Positive()]<\/span>\n        <span class=\"k\">public<\/span> <span class=\"k\">readonly<\/span> <span class=\"kt\">int<\/span> <span class=\"nv\">$amount<\/span><span class=\"p\">,<\/span>\n\n        <span class=\"c1\">#[NotBlank()]<\/span>\n        <span class=\"c1\">#[Type('int')]<\/span>\n        <span class=\"c1\">#[Range(<\/span>\n            <span class=\"kt\">min<\/span><span class=\"o\">:<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span>\n            <span class=\"kt\">max<\/span><span class=\"o\">:<\/span> <span class=\"mi\">12<\/span><span class=\"p\">,<\/span>\n            <span class=\"kt\">notInRangeMessage<\/span><span class=\"o\">:<\/span> <span class=\"s1\">'Expected to be between {{ min }} and {{ max }}, got {{ value }}'<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">)]<\/span>\n        <span class=\"k\">public<\/span> <span class=\"k\">readonly<\/span> <span class=\"kt\">int<\/span> <span class=\"nv\">$installments<\/span><span class=\"p\">,<\/span>\n\n        <span class=\"c1\">#[Type('string')]<\/span>\n        <span class=\"k\">public<\/span> <span class=\"kt\">?string<\/span> <span class=\"nv\">$description<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0641\u0642\u0637 \u0627\u0632 \u06a9\u0644\u0627\u0633 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0628\u0647 \u0645\u062a\u062f \u06a9\u0646\u062a\u0631\u0644\u0631 \u0628\u0627 \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <code>#[MapRequestPayload]<\/code> \u0648 \u062a\u0645\u0627\u0645\u060c \u0645\u0642\u0627\u062f\u06cc\u0631 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647 \u0634\u06cc \u0646\u06af\u0627\u0634\u062a \u0645\u06cc \u0634\u0648\u0646\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0645\u062b\u0627\u0644 \u0632\u06cc\u0631.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">declare<\/span><span class=\"p\">(<\/span><span class=\"n\">strict_types<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\n\n<span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Controller<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kn\">use<\/span> <span class=\"nc\">App\\Dto\\CreateTransactionDto<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">DateTimeImmutable<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Bundle\\FrameworkBundle\\Controller\\AbstractController<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\HttpFoundation\\JsonResponse<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\HttpKernel\\Attribute\\MapRequestPayload<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Routing\\Annotation\\Route<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">TransactionController<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">AbstractController<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"c1\">#[Route('\/api\/v1\/transactions', name: 'app_api_create_transaction_v1', methods: ['POST'])]<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">v1Create<\/span><span class=\"p\">(<\/span><span class=\"c1\">#[MapRequestPayload] CreateTransactionDto $createTransaction): JsonResponse<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">json<\/span><span class=\"p\">([<\/span>\n            <span class=\"s1\">'resonse'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'ok'<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'datetime'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">DateTimeImmutable<\/span><span class=\"p\">(<\/span><span class=\"s1\">'now'<\/span><span class=\"p\">))<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">format<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Y-m-d H:i:s'<\/span><span class=\"p\">),<\/span>\n            <span class=\"s1\">'firstName'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$createTransaction<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">firstName<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'lastName'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$createTransaction<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">lastName<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'amount'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$createTransaction<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">amount<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'installments'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$createTransaction<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">installments<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'description'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$createTransaction<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">description<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">]);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0641\u0642\u0637 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0627 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>curl <span class=\"nt\">--request<\/span> POST <span class=\"se\">\\<\/span>\n  <span class=\"nt\">--url<\/span> http:\/\/127.0.0.1:8001\/api\/v1\/transactions <span class=\"se\">\\<\/span>\n  <span class=\"nt\">--header<\/span> <span class=\"s1\">'Content-Type: application\/json'<\/span> <span class=\"se\">\\<\/span>\n  <span class=\"nt\">--data<\/span> <span class=\"s1\">'{\n  \"firstName\": \"Joubert\",\n  \"lastName\": \"RedRat\",\n  \"cardNumber\": \"4130731304267489\",\n  \"amount\": 35011757,\n  \"installments\": 2\n}'<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight json\"><code><span class=\"err\">&lt;<\/span><span class=\"w\"> <\/span><span class=\"err\">HTTP\/<\/span><span class=\"mf\">1.1<\/span><span class=\"w\"> <\/span><span class=\"mi\">200<\/span><span class=\"w\"> <\/span><span class=\"err\">OK<\/span><span class=\"w\">\n<\/span><span class=\"err\">&lt;<\/span><span class=\"w\"> <\/span><span class=\"err\">Content-Type:<\/span><span class=\"w\"> <\/span><span class=\"err\">application\/json<\/span><span class=\"w\">\n\n<\/span><span class=\"p\">{<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"resonse\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"ok\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"datetime\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"2023-07-04 19:36:37\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"firstName\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"Joubert\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"lastName\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"RedRat\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"cardNumber\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"4130731304267489\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"amount\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"mi\">35011757<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"installments\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"description\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">null<\/span><span class=\"w\">\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0645\u062b\u0627\u0644 \u0628\u0627\u0644\u0627\u060c \u0627\u06af\u0631 \u0645\u0642\u0627\u062f\u06cc\u0631 \u0637\u0628\u0642 \u0642\u0648\u0627\u0646\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u067e\u0631 \u0646\u0634\u062f\u0647 \u0628\u0627\u0634\u0646\u062f\u060c \u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627 \u0645\u0637\u0631\u062d \u0645\u06cc \u0634\u0648\u062f \u0648 \u0628\u0627 \u062e\u0637\u0627\u0647\u0627\u06cc \u06cc\u0627\u0641\u062a \u0634\u062f\u0647 \u067e\u0627\u0633\u062e\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p><\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u06cc\u0646 \u0627\u0633\u062a\u062b\u0646\u0627 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0627\u0633\u062a <code>ValidationFailedException<\/code> \u0648 \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0633\u0627\u062e\u062a \u06cc\u06a9 API \u0647\u0633\u062a\u06cc\u0645\u060c \u067e\u0627\u0633\u062e \u0628\u0627 \u0641\u0631\u0645\u062a json \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a.<\/p>\n<p>\u0628\u0627 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0646 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%DA%A9%D9%84%D8%A7%D8%B3_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%DA%86%DA%A9%DB%8C%D8%AF%D9%87\"><\/span>\n<p>  \u06a9\u0644\u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0686\u06a9\u06cc\u062f\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627\u06cc \u0628\u0632\u0631\u06af Symfony \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06af\u0633\u062a\u0631\u062f\u0647 \u0648 \u06af\u0633\u062a\u0631\u062f\u0647 \u0627\u0632 DIP &#8220;Dependency Inversion Original&#8221; \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0638\u0631\u0641 \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0622\u0646 \u0628\u0627 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 autowire \u0627\u0633\u062a.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u06a9\u0644\u0627\u0633 \u0627\u0646\u062a\u0632\u0627\u0639\u06cc \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0634\u0627\u0645\u0644 \u062a\u0645\u0627\u0645 \u06a9\u062f\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0633\u0626\u0648\u0644 \u062a\u062c\u0632\u06cc\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0622\u0646 \u0647\u0633\u062a\u0646\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0645\u062b\u0627\u0644 \u0632\u06cc\u0631.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">declare<\/span><span class=\"p\">(<\/span><span class=\"n\">strict_types<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\n\n<span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Request<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kn\">use<\/span> <span class=\"nc\">Fig\\Http\\Message\\StatusCodeInterface<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Jawira\\CaseConverter\\Convert<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\HttpFoundation\\JsonResponse<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\HttpFoundation\\Request<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\HttpFoundation\\RequestStack<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Validator\\Validator\\ValidatorInterface<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">AbstractJsonRequest<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">__construct<\/span><span class=\"p\">(<\/span>\n        <span class=\"k\">protected<\/span> <span class=\"kt\">ValidatorInterface<\/span> <span class=\"nv\">$validator<\/span><span class=\"p\">,<\/span>\n        <span class=\"k\">protected<\/span> <span class=\"kt\">RequestStack<\/span> <span class=\"nv\">$requestStack<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">populate<\/span><span class=\"p\">();<\/span>\n        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">validate<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">getRequest<\/span><span class=\"p\">():<\/span> <span class=\"kt\">Request<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">requestStack<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getCurrentRequest<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">populate<\/span><span class=\"p\">():<\/span> <span class=\"kt\">void<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"nv\">$request<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getRequest<\/span><span class=\"p\">();<\/span>\n        <span class=\"nv\">$reflection<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"err\">\\<\/span><span class=\"nf\">ReflectionClass<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$request<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">toArray<\/span><span class=\"p\">()<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$property<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nv\">$attribute<\/span> <span class=\"o\">=<\/span> <span class=\"k\">self<\/span><span class=\"o\">::<\/span><span class=\"nf\">camelCase<\/span><span class=\"p\">(<\/span><span class=\"nv\">$property<\/span><span class=\"p\">);<\/span>\n            <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">property_exists<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$attribute<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n                <span class=\"nv\">$reflectionProperty<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$reflection<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getProperty<\/span><span class=\"p\">(<\/span><span class=\"nv\">$attribute<\/span><span class=\"p\">);<\/span>\n                <span class=\"nv\">$reflectionProperty<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">setValue<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$value<\/span><span class=\"p\">);<\/span>\n            <span class=\"p\">}<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">protected<\/span> <span class=\"k\">function<\/span> <span class=\"n\">validate<\/span><span class=\"p\">():<\/span> <span class=\"kt\">void<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"nv\">$errors<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">validator<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">validate<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"p\">);<\/span>\n        <span class=\"nv\">$messages<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[];<\/span>\n\n        <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$errors<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$message<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nv\">$messages<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n                <span class=\"s1\">'property'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"k\">self<\/span><span class=\"o\">::<\/span><span class=\"nf\">snakeCase<\/span><span class=\"p\">(<\/span><span class=\"nv\">$message<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getPropertyPath<\/span><span class=\"p\">()),<\/span>\n                <span class=\"s1\">'value'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$message<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getInvalidValue<\/span><span class=\"p\">(),<\/span>\n                <span class=\"s1\">'message'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$message<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getMessage<\/span><span class=\"p\">(),<\/span>\n            <span class=\"p\">];<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nb\">count<\/span><span class=\"p\">(<\/span><span class=\"nv\">$messages<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nv\">$response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">JsonResponse<\/span><span class=\"p\">([<\/span><span class=\"s1\">'errors'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$messages<\/span><span class=\"p\">],<\/span> <span class=\"nc\">StatusCodeInterface<\/span><span class=\"o\">::<\/span><span class=\"no\">STATUS_BAD_REQUEST<\/span><span class=\"p\">);<\/span>\n            <span class=\"nv\">$response<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">send<\/span><span class=\"p\">();<\/span>\n            <span class=\"k\">exit<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">static<\/span> <span class=\"k\">function<\/span> <span class=\"n\">camelCase<\/span><span class=\"p\">(<\/span><span class=\"kt\">string<\/span> <span class=\"nv\">$attribute<\/span><span class=\"p\">):<\/span> <span class=\"kt\">string<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">Convert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$attribute<\/span><span class=\"p\">))<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">toCamel<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">private<\/span> <span class=\"k\">static<\/span> <span class=\"k\">function<\/span> <span class=\"n\">snakeCase<\/span><span class=\"p\">(<\/span><span class=\"kt\">string<\/span> <span class=\"nv\">$attribute<\/span><span class=\"p\">):<\/span> <span class=\"kt\">string<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">Convert<\/span><span class=\"p\">(<\/span><span class=\"nv\">$attribute<\/span><span class=\"p\">))<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">toSnake<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u06a9\u0644\u0627\u0633 \u0628\u0627\u0644\u0627 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f <code>ValidatorInterface<\/code> \u0648 <code>RequestStack<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0648 \u062f\u0631 \u0633\u0627\u0632\u0646\u062f\u0647 \u062a\u06a9\u0645\u06cc\u0644 \u0648 \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0635\u0641\u0627\u062a \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0645\u0634\u0627\u0647\u062f\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0628\u06cc\u0646 \u0627\u0644\u06af\u0648\u0647\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f <code>snake_case<\/code> \u0647 <code>camelCase<\/code> \u062f\u0631 \u0635\u0641\u0627\u062a \u0648 \u062e\u0637\u0627\u0647\u0627\u060c \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f \u0632\u06cc\u0631\u0627 \u0642\u0631\u0627\u0631\u062f\u0627\u062f\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u06cc\u06a9 JSON \u0628\u0627\u06cc\u062f \u0628\u0627\u0634\u062f. <code>snake_case<\/code>\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 PSR-2 \u0648 PSR-12 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0631\u0627 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc \u06a9\u0646\u0646\u062f <code>camelCase<\/code> \u0628\u0631\u0627\u06cc \u0646\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u062f\u0631 \u06a9\u0644\u0627\u0633 \u0647\u0627\u060c \u0627\u06cc\u0646 \u062a\u0628\u062f\u06cc\u0644 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f.  \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0645\u0628\u062f\u0644 Case \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0634\u0627\u06cc\u0627\u0646 \u0630\u06a9\u0631 \u0627\u0633\u062a \u06a9\u0647 \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0632 \u0647\u0631 \u0627\u0644\u06af\u0648\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0627\u06cc\u0646 \u06cc\u06a9 \u0642\u0627\u0646\u0648\u0646 \u0645\u0637\u0644\u0642 \u0646\u06cc\u0633\u062a <code>snake_case<\/code> \u062f\u0631 JSON\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%DA%A9%D9%84%D8%A7%D8%B3_%D8%A8%D8%A7_%D9%88%DB%8C%DA%98%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%B3%D9%86%D8%AC%DB%8C\"><\/span>\n<p>  \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0644\u0627\u0633 \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u06a9\u0644\u0627\u0633 \u0627\u0646\u062a\u0632\u0627\u0639\u06cc \u0645\u0633\u0626\u0648\u0644 \u062a\u0645\u0627\u0645 \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0627\u0633\u062a\u060c \u0627\u06a9\u0646\u0648\u0646 \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0631\u0627 \u0645\u0627\u0646\u0646\u062f \u0645\u062b\u0627\u0644 \u0632\u06cc\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">declare<\/span><span class=\"p\">(<\/span><span class=\"n\">strict_types<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\n\n<span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Request<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kn\">use<\/span> <span class=\"nc\">App\\Validator\\CreditCard<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Validator\\Constraints\\NotBlank<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Validator\\Constraints\\Positive<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Validator\\Constraints\\Range<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Validator\\Constraints\\Type<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">CreateTransactionRequest<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">AbstractJsonRequest<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"c1\">#[NotBlank(message: 'I dont like this field empty')]<\/span>\n    <span class=\"c1\">#[Type('string')]<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">readonly<\/span> <span class=\"kt\">string<\/span> <span class=\"nv\">$firstName<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"c1\">#[NotBlank(message: 'I dont like this field empty')]<\/span>\n    <span class=\"c1\">#[Type('string')]<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">readonly<\/span> <span class=\"kt\">string<\/span> <span class=\"nv\">$lastName<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"c1\">#[NotBlank()]<\/span>\n    <span class=\"c1\">#[Type('string')]<\/span>\n    <span class=\"c1\">#[CreditCard()]<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">readonly<\/span> <span class=\"kt\">string<\/span> <span class=\"nv\">$cardNumber<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"c1\">#[NotBlank()]<\/span>\n    <span class=\"c1\">#[Positive()]<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">readonly<\/span> <span class=\"kt\">int<\/span> <span class=\"nv\">$amount<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"c1\">#[NotBlank()]<\/span>\n    <span class=\"c1\">#[Type('int')]<\/span>\n    <span class=\"c1\">#[Range(<\/span>\n        <span class=\"n\">min<\/span><span class=\"o\">:<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">max<\/span><span class=\"o\">:<\/span> <span class=\"mi\">12<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">notInRangeMessage<\/span><span class=\"o\">:<\/span> <span class=\"s1\">'Expected to be between {{ min }} and {{ max }}, got {{ value }}'<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)]<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">readonly<\/span> <span class=\"kt\">int<\/span> <span class=\"nv\">$installments<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"c1\">#[Type('string')]<\/span>\n    <span class=\"k\">public<\/span> <span class=\"kt\">?string<\/span> <span class=\"nv\">$description<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0632\u06cc\u062a \u0628\u0632\u0631\u06af \u06a9\u0644\u0627\u0633 \u0641\u0648\u0642 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062a\u0645\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u062c\u0628\u0627\u0631\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0627\u0631\u0627\u06cc \u0648\u0636\u0639\u06cc\u062a \u0647\u0633\u062a\u0646\u062f <code>readonly<\/code>\u060c \u0627\u0645\u06a9\u0627\u0646 \u062a\u0636\u0645\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0646\u0627\u067e\u0630\u06cc\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.  \u0646\u06a9\u062a\u0647 \u062c\u0627\u0644\u0628 \u062f\u06cc\u06af\u0631 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc Symfony Validation \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u06cc\u0627 \u062d\u062a\u06cc \u0627\u06cc\u062c\u0627\u062f \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_%DA%A9%D9%84%D8%A7%D8%B3_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D8%AF%D8%B1_Route\"><\/span>\n<p>  \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0631 Route<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u0622\u0645\u0627\u062f\u0647 \u0628\u0648\u062f\u0646 \u06a9\u0644\u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0627\u06a9\u0646\u0648\u0646 \u062a\u0646\u0647\u0627 \u06a9\u0627\u0631\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0632 \u0622\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0628\u0647 \u0645\u0633\u06cc\u0631\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u06a9\u0646\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0628\u0631\u062e\u0644\u0627\u0641 \u0645\u062b\u0627\u0644 \u0642\u0628\u0644\u06cc\u060c \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0636\u0631\u0648\u0631\u06cc \u0646\u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f. <code>#[MapRequestPayload]<\/code>\u060c \u0645\u0627\u0646\u0646\u062f \u0645\u062b\u0627\u0644 \u0632\u06cc\u0631.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"cp\">&lt;?php<\/span> <span class=\"k\">declare<\/span><span class=\"p\">(<\/span><span class=\"n\">strict_types<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\n\n<span class=\"kn\">namespace<\/span> <span class=\"nn\">App\\Controller<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kn\">use<\/span> <span class=\"nc\">App\\Request\\CreateTransactionRequest<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">DateTimeImmutable<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Bundle\\FrameworkBundle\\Controller\\AbstractController<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\HttpFoundation\\JsonResponse<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Symfony\\Component\\Routing\\Annotation\\Route<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">TransactionController<\/span> <span class=\"kd\">extends<\/span> <span class=\"nc\">AbstractController<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"c1\">#[Route('\/api\/v2\/transactions', name: 'app_api_create_transaction_v2', methods: ['POST'])]<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"n\">v2Create<\/span><span class=\"p\">(<\/span><span class=\"kt\">CreateTransactionRequest<\/span> <span class=\"nv\">$request<\/span><span class=\"p\">):<\/span> <span class=\"kt\">JsonResponse<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">json<\/span><span class=\"p\">([<\/span>\n            <span class=\"s1\">'resonse'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'ok'<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'datetime'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">DateTimeImmutable<\/span><span class=\"p\">(<\/span><span class=\"s1\">'now'<\/span><span class=\"p\">))<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">format<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Y-m-d H:i:s'<\/span><span class=\"p\">),<\/span>\n            <span class=\"s1\">'first_name'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$request<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">firstName<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'last_name'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$request<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">lastName<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'amount'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$request<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">amount<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'installments'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$request<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">installments<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'description'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$request<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">description<\/span><span class=\"p\">,<\/span>\n            <span class=\"s1\">'headers'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">[<\/span>\n                <span class=\"s1\">'Content-Type'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$request<\/span>\n                    <span class=\"o\">-&gt;<\/span><span class=\"nf\">getRequest<\/span><span class=\"p\">()<\/span>\n                    <span class=\"o\">-&gt;<\/span><span class=\"n\">headers<\/span>\n                    <span class=\"o\">-&gt;<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Content-Type'<\/span><span class=\"p\">)<\/span>\n                <span class=\"p\">,<\/span>\n            <span class=\"p\">],<\/span>\n        <span class=\"p\">]);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0628\u0627\u0644\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u06cc\u062f \u06a9\u0647 \u0627\u0632 \u0633\u0646\u062a\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u06cc \u06a9\u0646\u06cc\u0645 <code>Request<\/code> \u0627\u0632 HttpFoundation \u0648 \u0628\u0644\u0647 \u06a9\u0644\u0627\u0633 \u0645\u0627 <code>CreateTransactionRequest<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0648 \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u062c\u0627\u062f\u0648 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f\u060c \u0632\u06cc\u0631\u0627 \u062a\u0645\u0627\u0645 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u062a\u0632\u0631\u06cc\u0642 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C_%D8%A7%DB%8C%D9%86_%D8%B1%D9%88%DB%8C%DA%A9%D8%B1%D8%AF\"><\/span>\n<p>  \u0645\u0632\u0627\u06cc\u0627\u06cc \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0645\u0642\u0627\u06cc\u0633\u0647 \u0628\u0627 \u0645\u062b\u0627\u0644 \u0627\u0635\u0644\u06cc\u060c \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062f\u0648 \u0645\u0632\u06cc\u062a \u0639\u0645\u062f\u0647 \u062f\u0627\u0631\u062f.<\/p>\n<ul>\n<li>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0633\u0627\u062e\u062a\u0627\u0631 json \u0648 \u06a9\u062f \u0648\u0636\u0639\u06cc\u062a \u067e\u0627\u0633\u062e \u0631\u0627 \u0628\u0647 \u062f\u0644\u062e\u0648\u0627\u0647 \u0634\u062e\u0635\u06cc \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p>\u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u06a9\u0644\u0627\u0633 Request Smyfony \u06a9\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u062a\u0632\u0631\u06cc\u0642 \u0634\u062f\u0647 \u0627\u0633\u062a \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0627\u0633\u062a\u060c \u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0647 \u0647\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc \u0645\u0627\u0646\u0646\u062f \u0647\u062f\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a.  \u062f\u0631 \u0645\u062b\u0627\u0644 \u0627\u0635\u0644\u06cc \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f\u060c \u0645\u06af\u0631 \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0644\u0627\u0633 Request \u0631\u0627 \u0646\u06cc\u0632 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0628\u0647 \u0645\u0633\u06cc\u0631 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f\u060c \u06a9\u0647 \u0639\u062c\u06cc\u0628 \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u062f\u0648 \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647 \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0627\u0631\u062f.<\/p>\n<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B2%D9%85%D8%A7%D9%86_%D8%AA%D8%B3%D8%AA\"><\/span>\n<p>  \u0632\u0645\u0627\u0646 \u062a\u0633\u062a!<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0645\u0627 \u0622\u0645\u0627\u062f\u0647 \u0627\u0633\u062a\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0633\u0631\u0627\u063a \u0622\u0632\u0645\u0627\u06cc\u0634 \u0647\u0627 \u0628\u0631\u0648\u06cc\u0645.<\/p>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u062b\u0627\u0644 \u0639\u0645\u062f\u0627 \u062f\u0627\u0631\u0627\u06cc \u062e\u0637\u0627\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u067e\u0627\u0633\u062e\u200c\u0647\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0631\u0627 \u0628\u0628\u06cc\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>curl <span class=\"nt\">--request<\/span> POST <span class=\"se\">\\<\/span>\n  <span class=\"nt\">--url<\/span> http:\/\/127.0.0.1:8001\/api\/v2\/transactions <span class=\"se\">\\<\/span>\n  <span class=\"nt\">--header<\/span> <span class=\"s1\">'Content-Type: application\/json'<\/span> <span class=\"se\">\\<\/span>\n  <span class=\"nt\">--data<\/span> <span class=\"s1\">'{\n  \"last_name\": \"RedRat\",\n  \"card_number\": \"1130731304267489\",\n  \"amount\": -4,\n  \"installments\": 16\n}'<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight json\"><code><span class=\"err\">&lt;<\/span><span class=\"w\"> <\/span><span class=\"err\">HTTP\/<\/span><span class=\"mf\">1.1<\/span><span class=\"w\"> <\/span><span class=\"mi\">400<\/span><span class=\"w\"> <\/span><span class=\"err\">Bad<\/span><span class=\"w\"> <\/span><span class=\"err\">Request<\/span><span class=\"w\">\n<\/span><span class=\"err\">&lt;<\/span><span class=\"w\"> <\/span><span class=\"err\">Content-Type:<\/span><span class=\"w\"> <\/span><span class=\"err\">application\/json<\/span><span class=\"w\">\n\n<\/span><span class=\"p\">{<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"errors\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\n    <\/span><span class=\"p\">{<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"property\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"first_name\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"value\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">null<\/span><span class=\"p\">,<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"message\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"I dont like this field empty.\"<\/span><span class=\"w\">\n    <\/span><span class=\"p\">},<\/span><span class=\"w\">\n    <\/span><span class=\"p\">{<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"property\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"card_number\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"value\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"1130731304267489\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"message\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"Expected valid credit card number.\"<\/span><span class=\"w\">\n    <\/span><span class=\"p\">},<\/span><span class=\"w\">\n    <\/span><span class=\"p\">{<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"property\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"amount\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"value\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"mi\">-4<\/span><span class=\"p\">,<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"message\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"This value should be positive.\"<\/span><span class=\"w\">\n    <\/span><span class=\"p\">},<\/span><span class=\"w\">\n    <\/span><span class=\"p\">{<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"property\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"installments\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"value\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"mi\">16<\/span><span class=\"p\">,<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"message\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"Expected to be between 1 and 12, got 16\"<\/span><span class=\"w\">\n    <\/span><span class=\"p\">}<\/span><span class=\"w\">\n  <\/span><span class=\"p\">]<\/span><span class=\"w\">\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u0645\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0627\u0646\u062c\u0627\u0645 \u0634\u062f \u0648 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u067e\u0631 \u0646\u0634\u062f\u0647 \u06cc\u0627 \u0628\u0627 \u0645\u0642\u0627\u062f\u06cc\u0631 \u0646\u0627\u062f\u0631\u0633\u062a\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0631\u0627 \u067e\u0634\u062a \u0633\u0631 \u06af\u0630\u0627\u0634\u062a\u0646\u062f \u0648 \u0645\u0627 \u067e\u0627\u0633\u062e \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0631\u0627 \u062f\u0627\u0634\u062a\u06cc\u0645.<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0639\u062a\u0628\u0631 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0648 \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 \u067e\u0627\u0633\u062e \u0645\u0648\u0641\u0642\u06cc\u062a\u200c\u0622\u0645\u06cc\u0632 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f\u060c \u0632\u06cc\u0631\u0627 \u0647\u0645\u0647 \u0641\u06cc\u0644\u062f\u0647\u0627 \u062f\u0631 \u0647\u0645\u0627\u0646 \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>curl <span class=\"nt\">--request<\/span> POST <span class=\"se\">\\<\/span>\n  <span class=\"nt\">--url<\/span> http:\/\/127.0.0.1:8001\/api\/v2\/transactions <span class=\"se\">\\<\/span>\n  <span class=\"nt\">--header<\/span> <span class=\"s1\">'Content-Type: application\/json'<\/span> <span class=\"se\">\\<\/span>\n  <span class=\"nt\">--data<\/span> <span class=\"s1\">'{\n  \"first_name\": \"Joubert\",\n  \"last_name\": \"RedRat\",\n  \"card_number\": \"4130731304267489\",\n  \"amount\": 35011757,\n  \"installments\": 2\n}'<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight json\"><code><span class=\"err\">&lt;<\/span><span class=\"w\"> <\/span><span class=\"err\">HTTP\/<\/span><span class=\"mf\">1.1<\/span><span class=\"w\"> <\/span><span class=\"mi\">200<\/span><span class=\"w\"> <\/span><span class=\"err\">OK<\/span><span class=\"w\">\n<\/span><span class=\"err\">&lt;<\/span><span class=\"w\"> <\/span><span class=\"err\">Content-Type:<\/span><span class=\"w\"> <\/span><span class=\"err\">application\/json<\/span><span class=\"w\">\n\n<\/span><span class=\"p\">{<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"resonse\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"ok\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"datetime\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"2023-07-01 16:39:48\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"first_name\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"Joubert\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"last_name\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"RedRat\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"card_number\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"4130731304267489\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"amount\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"mi\">35011757<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"installments\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"description\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">null<\/span><span class=\"w\">\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%AD%D8%AF%D9%88%D8%AF%DB%8C%D8%AA_%D9%87%D8%A7\"><\/span>\n<p>  \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0627\u0634\u0646\u062f <code>readonly<\/code>\u060c \u0632\u06cc\u0631\u0627 \u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u062f\u0648\u0646 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c PHP \u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0645\u0646 \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0639\u0627\u062f\u06cc \u0628\u0627 \u0645\u0642\u0627\u062f\u06cc\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645.<\/p>\n<p>\u0645\u0646 \u0647\u0646\u0648\u0632 \u062f\u0631 \u062d\u0627\u0644 \u062a\u062d\u0642\u06cc\u0642 \u062f\u0631 \u0645\u0648\u0631\u062f \u06af\u0632\u06cc\u0646\u0647 \u0627\u06cc \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0631\u0627\u0647 \u062d\u0644\u06cc \u0647\u0633\u062a\u0645 \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u0645 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645 <code>readonly<\/code> \u062f\u0631 \u0642\u0633\u0645\u062a \u0647\u0627\u06cc \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc\u060c \u0645\u0627\u0646\u0646\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Reflection \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0648 \u0645\u0646 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0627\u062a \u0631\u0627 \u0645\u06cc \u067e\u0630\u06cc\u0631\u0645 \ud83d\ude42<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/07\/1688626065_856_Validando-\u0647\u06cc\u0686-\u0641\u0631\u06cc\u0645-\u0648\u0631\u06a9-Symfony-\u0631\u0627-\u062f\u0631\u062e\u0648\u0627\u0633\u062a-\u0646\u0645\u06cc-\u06a9\u0646\u062f.png\" alt=\"\u0648\u06cc\u0698\u06af\u06cc \u0627\u0633\u062a\u062b\u0646\u0627\u06cc\u06cc \u0641\u0642\u0637 \u062e\u0648\u0627\u0646\u062f\u0646\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a\" loading=\"lazy\" width=\"800\" height=\"477\" title=\"\"><\/p>\n<p>\u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0627\u0632 \u062f\u0648\u0633\u062a \u0628\u0632\u0631\u06af\u0645 \u0648\u06cc\u0646\u06cc\u0633\u06cc\u0648\u0633 \u062f\u06cc\u0627\u0633 \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0632\u0646\u06af\u0631\u06cc \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0628\u0647 \u0645\u0646 \u06a9\u0645\u06a9 \u06a9\u0631\u062f \u062a\u0634\u06a9\u0631 \u06a9\u0646\u0645.<\/p>\n<p>\u067e\u0633 \u0647\u0645\u06cc\u0646\u060c \u062a\u0627 \u062f\u0641\u0639\u0647 \u0628\u0639\u062f!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u0645\u0631\u0648\u0632\u0647 Symfony \u06cc\u06a9\u06cc \u0627\u0632 \u0628\u0627\u0644\u063a \u062a\u0631\u06cc\u0646 \u0648 \u0642\u0648\u06cc \u062a\u0631\u06cc\u0646 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0628\u0627\u0632\u0627\u0631 \u0627\u0633\u062a \u0648 \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u062f\u0631 \u0686\u0646\u062f\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0627\u0632 \u062c\u0645\u0644\u0647 \u0627\u06cc\u062c\u0627\u062f API \u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. Symfony \u0627\u062e\u06cc\u0631\u0627\u064b \u0686\u0646\u062f\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u062c\u0627\u0644\u0628 \u0631\u0627 \u0634\u0627\u0645\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0642\u0627\u0628\u0644\u06cc\u062a \u0646\u06af\u0627\u0634\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0628\u0647 \u06cc\u06a9 \u0634\u06cc\u060c \u06a9\u0647 \u062f\u0631 \u0646\u0633\u062e\u0647 6.3 \u0638\u0627\u0647\u0631 \u0634\u062f. \u0628\u0627 \u0627\u06cc\u0646 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":29434,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-29432","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/29432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=29432"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/29432\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/29434"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=29432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=29432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=29432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}