{"id":1140,"date":"2025-06-12T14:03:22","date_gmt":"2025-06-12T06:03:22","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1140.html"},"modified":"2025-06-12T14:03:22","modified_gmt":"2025-06-12T06:03:22","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8symfony%e4%b8%ad%e5%a4%84%e7%90%86post-json%e8%af%b7%e6%b1%82","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1140.html","title":{"rendered":"\u5982\u4f55\u5728Symfony\u4e2d\u5904\u7406POST JSON\u8bf7\u6c42"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Symfony &#20013;&#22788;&#29702; POST JSON &#35831;&#27714;&#28041;&#21450;&#20197;&#19979;&#20960;&#20010;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li><strong>&#21019;&#24314;&#25511;&#21046;&#22120;<\/strong>&#65306;&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;&#36825;&#20123;&#35831;&#27714;&#12290;<\/li>\n<li><strong>&#37197;&#32622;&#36335;&#30001;<\/strong>&#65306;&#30830;&#20445;&#20320;&#30340;&#36335;&#30001;&#33021;&#22815;&#25509;&#21463; POST &#35831;&#27714;&#65292;&#24182;&#19988;&#27491;&#30830;&#22320;&#26144;&#23556;&#21040;&#25511;&#21046;&#22120;&#26041;&#27861;&#12290;<\/li>\n<li><strong>&#35299;&#26512;&#35831;&#27714;&#20307;<\/strong>&#65306;&#20351;&#29992; Symfony &#30340; HttpFoundation &#21253;&#26469;&#35299;&#26512; POST &#35831;&#27714;&#30340; JSON &#25968;&#25454;&#12290;<\/li>\n<\/ol>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#23454;&#29616;&#36825;&#20123;&#27493;&#39588;&#65306;<\/p>\n<h3>1. &#21019;&#24314;&#25511;&#21046;&#22120;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; <code>UserController<\/code> &#30340;&#25511;&#21046;&#22120;&#65292;&#24182;&#19988;&#23427;&#26377;&#19968;&#20010;&#22788;&#29702; POST &#35831;&#27714;&#30340;&#26041;&#27861; <code>createUser<\/code>&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/UserController.php\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationJsonResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\nuse SymfonyComponentSerializerEncoderJsonEncoder;\nuse SymfonyComponentSerializerNormalizerObjectNormalizer;\n\nclass UserController extends AbstractController\n{\n    \/**\n     * @Route(\"\/users\", name=\"create_user\")\n     *\/\n    public function createUser(Request $request)\n    {\n        \/\/ &#35299;&#26512;&#35831;&#27714;&#20307;&#20026; JSON\n        $data = json_decode($request-&gt;getContent(), true);\n\n        \/\/ &#26816;&#26597;&#35831;&#27714;&#26159;&#21542;&#26377;&#25928;\n        if (json_last_error() !== JSON_ERROR_NONE) {\n            return new JsonResponse(['error' =&gt; 'Invalid JSON'], 400);\n        }\n\n        \/\/ &#20351;&#29992; Serializer &#36827;&#34892;&#21453;&#24207;&#21015;&#21270;\n        $normalizer = new ObjectNormalizer();\n        $encoder = new JsonEncoder();\n\n        $user = $normalizer-&gt;denormalize($data, User::class);\n\n        \/\/ &#22788;&#29702;&#29992;&#25143;&#25968;&#25454;&#65288;&#20363;&#22914;&#20445;&#23384;&#21040;&#25968;&#25454;&#24211;&#65289;\n\n        return new JsonResponse(['message' =&gt; 'User created successfully']);\n    }\n}<\/code><\/pre>\n<h3>2. &#37197;&#32622;&#36335;&#30001;<\/h3>\n<p>&#22312; <code>config\/routes.yaml<\/code> &#25991;&#20214;&#20013;&#28155;&#21152;&#19968;&#20010;&#36335;&#30001;&#26469;&#26144;&#23556;&#21040;&#25105;&#20204;&#30340;&#25511;&#21046;&#22120;&#26041;&#27861;&#12290;<\/p>\n<pre><code class=\"language-yaml\"># config\/routes.yaml\napp:\n    resource: ..\/src\/Controller\/\n    type: annotation<\/code><\/pre>\n<h3>3. &#23450;&#20041;&#23454;&#20307;&#31867;<\/h3>\n<p>&#20026;&#20102;&#26356;&#22909;&#22320;&#29702;&#35299;&#65292;&#25105;&#20204;&#38656;&#35201;&#23450;&#20041;&#19968;&#20010; <code>User<\/code> &#23454;&#20307;&#31867;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Entity\/User.php\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryUserRepository\")\n *\/\nclass User\n{\n    \/**\n     * @ORMId\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=255)\n     *\/\n    private $name;\n\n    \/\/ Getters and Setters\n}<\/code><\/pre>\n<h3>4. &#23433;&#35013;&#24517;&#35201;&#30340;&#21253;<\/h3>\n<p>&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102; <code>symfony\/http-foundation<\/code> &#21644; <code>symfony\/serializer<\/code> &#21253;&#12290;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/http-foundation symfony\/serializer<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#23436;&#25972;&#30340;&#31034;&#20363;&#20195;&#30721;&#65306;<\/p>\n<h4>UserController.php<\/h4>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationJsonResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\nuse SymfonyComponentSerializerEncoderJsonEncoder;\nuse SymfonyComponentSerializerNormalizerObjectNormalizer;\n\nclass UserController extends AbstractController\n{\n    \/**\n     * @Route(\"\/users\", name=\"create_user\")\n     *\/\n    public function createUser(Request $request)\n    {\n        \/\/ &#35299;&#26512;&#35831;&#27714;&#20307;&#20026; JSON\n        $data = json_decode($request-&gt;getContent(), true);\n\n        \/\/ &#26816;&#26597;&#35831;&#27714;&#26159;&#21542;&#26377;&#25928;\n        if (json_last_error() !== JSON_ERROR_NONE) {\n            return new JsonResponse(['error' =&gt; 'Invalid JSON'], 400);\n        }\n\n        \/\/ &#20351;&#29992; Serializer &#36827;&#34892;&#21453;&#24207;&#21015;&#21270;\n        $normalizer = new ObjectNormalizer();\n        $encoder = new JsonEncoder();\n\n        $user = $normalizer-&gt;denormalize($data, User::class);\n\n        \/\/ &#22788;&#29702;&#29992;&#25143;&#25968;&#25454;&#65288;&#20363;&#22914;&#20445;&#23384;&#21040;&#25968;&#25454;&#24211;&#65289;\n\n        return new JsonResponse(['message' =&gt; 'User created successfully']);\n    }\n}<\/code><\/pre>\n<h4>routes.yaml<\/h4>\n<pre><code class=\"language-yaml\"># config\/routes.yaml\napp:\n    resource: ..\/src\/Controller\/\n    type: annotation<\/code><\/pre>\n<h4>User.php<\/h4>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppEntity;\n\nuse DoctrineORMMapping as ORM;\n\n\/**\n * @ORMEntity(repositoryClass=\"AppRepositoryUserRepository\")\n *\/\nclass User\n{\n    \/**\n     * @ORMId\n     * @ORMGeneratedValue(strategy=\"AUTO\")\n     * @ORMColumn(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORMColumn(type=\"string\", length=255)\n     *\/\n    private $name;\n\n    \/\/ Getters and Setters\n}<\/code><\/pre>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312; Symfony &#20013;&#25104;&#21151;&#22788;&#29702; POST JSON &#35831;&#27714;&#24182;&#36827;&#34892;&#30456;&#24212;&#30340;&#22788;&#29702;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#22788;&#29702;HTTP&#35831;&#27714;&#26159;&#29616;&#20195;Web&#24320;&#21457;&#20013;&#30340;&#19968;&#20010;&#22522;&#26412;&#32452;&#25104;&#37096;&#20998;&#12290;&#38543;&#30528;RESTful API&#21644;&#21333;&#39029;&#24212;&#29992;&#31243;&#24207;&#65288;SPA&#65289;&#30340;&#26222;&#21450;&#65292;&#29702;&#35299;&#22914;&#20309;&#31649;&#29702;&#22522;&#20110;JSON&#30340;POST&#35831;&#27714;&#33267;&#20851;&#37325;&#35201;&#12290;&#26412;&#25991;&#23558;&#35814;&#32454;&#20171;&#32461;&#22312;Symfony&#26694;&#26550;&#20013;&#22788;&#29702;POST JSON&#35831;&#27714;&#30340;&#36807;&#31243;&#65292;&#36825;&#26159;&#35813;&#26694;&#26550;&#20197;&#20854;&#24378;&#22823;&#24615;&#21644;&#28789;&#27963;&#24615;&#32780;&#38395;&#21517;&#30340;&#19968;&#20010;&#26041;&#38754;&#12290;<\/p><p>&#21069;&#32622;&#26465;&#20214;&#65306;<\/p><p>Composer &#26159;&#19968;&#20010;&#29992;&#20110;&#31649;&#29702; PHP &#20381;&#36182;&#39033;&#30340;&#24037;&#20855;&#12290;<\/p><p>Symfony &#24050;&#23433;&#35013;&#22312;&#24744;&#30340;&#24320;&#21457;&#26426;&#22120;&#19978;&#12290;<\/p><p>&#22522;&#26412;&#29702;&#35299;PHP&#21644;Symfony<\/p><h2>&#35774;&#32622;&#19968;&#20010;&#26032;&#30340;Symfony&#39033;&#30446;<\/h2><pre><code>composer create-project symfony\/skeleton symfony-json-demo\n<\/code><\/pre><p>&#36827;&#20837;&#26032;&#39033;&#30446;&#30446;&#24405;&#65306;<\/p><pre><code>cd symfony-json-demo\n<\/code><\/pre><h2>&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;JSON&#35831;&#27714;<\/h2><p>&#20026;&#20102;&#22788;&#29702;JSON POST&#35831;&#27714;&#65292;&#39318;&#20808;&#38656;&#35201;&#19968;&#20010;&#25511;&#21046;&#22120;&#12290;Symfony&#30340;console&#24037;&#20855;&#20351;&#24471;&#29983;&#25104;&#19968;&#20010;&#25511;&#21046;&#22120;&#38750;&#24120;&#23481;&#26131;&#12290;<\/p><pre><code>php bin\/console make:controller JsonPostController\n<\/code><\/pre><p>&#36816;&#34892;&#21629;&#20196;&#21518;&#65292;&#21487;&#20197;&#22312; src\/Controller &#30446;&#24405;&#19979;&#25214;&#21040;&#26032;&#30340;&#25511;&#21046;&#22120;&#12290;<\/p><h2>&#32534;&#20889;&#25511;&#21046;&#22120;&#12290;<\/h2><p>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#20462;&#25913;&#30340;&#25511;&#21046;&#22120;&#20195;&#30721;&#65292;&#25105;&#26469;&#24110;&#21161;&#24744;&#28155;&#21152;&#35299;&#26512;JSON&#35831;&#27714;&#30340;&#36923;&#36753;&#12290;<\/p><pre><code>&lt;?php\n\nnamespace AppController;\n\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationJsonResponse;\n\nclass JsonPostController extends AbstractController\n{\n    \/**\n     * @Route(\"\/api\/post\", name=\"post_json\", methods={\"POST\"})\n     *\/\n    public function postJson(Request $request): JsonResponse\n    {\n        $data = json_decode($request-&gt;getContent(), true);\n\n        if ($data === null) {\n            return $this-&gt;json(['status' =&gt; 'error', 'message' =&gt; 'Invalid JSON'], Response::HTTP_BAD_REQUEST);\n        }\n\n        \/\/ Process your $data here\n\n        return $this-&gt;json(['status' =&gt; 'success', 'data' =&gt; $data]);\n    }\n}\n<\/code><\/pre><p>&#22312;&#19978;&#36848;&#20363;&#23376;&#20013;&#65292;<code>postJson<\/code>&#26041;&#27861;&#20351;&#29992;&#20102;&#12290;<code>Request<\/code>&#38656;&#35201;&#35775;&#38382;POST&#25968;&#25454;&#26102;&#65292;JSON&#34987;&#35299;&#30721;&#20026;&#25968;&#32452;&#12290;&#22914;&#26524;JSON&#26080;&#25928;&#65292;&#21017;&#36820;&#22238;&#21253;&#21547;&#38169;&#35823;&#28040;&#24687;&#30340;JSON&#21709;&#24212;&#12290;<\/p><h2>&#27880;&#20876;&#36335;&#32447;<\/h2><p>&#22312;Symfony 4 &#21450;&#20197;&#19978;&#29256;&#26412;&#20013;&#65292;&#21487;&#20197;&#36890;&#36807;&#27880;&#35299;&#33258;&#21160;&#27880;&#20876;&#36335;&#30001;&#12290;<code>@Route<\/code>&#22312;&#19978;&#36848;&#31034;&#20363;&#20013;&#65292;&#27880;&#35299;&#65288;annotation&#65289;&#22768;&#26126;&#20102;&#25105;&#20204;JSON POST&#35831;&#27714;&#22788;&#29702;&#22120;&#30340;&#36335;&#30001;&#12290;<\/p><h2>&#25552;&#21319;&#38169;&#35823;&#22788;&#29702;&#33021;&#21147;<\/h2><p>&#25105;&#20204;&#21487;&#20197;&#21033;&#29992;Symfony&#30340;&#39564;&#35777;&#32452;&#20214;&#26469;&#25913;&#36827;&#38169;&#35823;&#22788;&#29702;&#12290;&#39318;&#20808;&#65292;&#23433;&#35013;&#23427;&#65306;<\/p><pre><code>composer require symfony\/validator\n<\/code><\/pre><p>&#19979;&#19968;&#27493;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;&#39564;&#35777;&#26381;&#21153;&#26469;&#23454;&#29616;&#36755;&#20837;&#39564;&#35777;&#12290;&#26356;&#26032;&#20102;&#12290;<code>postJson<\/code>&#26041;&#27861;&#65306;<\/p><pre><code>&lt;?php\n\n\/\/ ...\n\nuse SymfonyComponentValidatorValidation;\nuse SymfonyComponentValidatorConstraints as Assert;\n\n\/\/ ...\n\npublic function postJson(Request $request): JsonResponse\n{\n    $data = json_decode($request-&gt;getContent(), true);\n    \n    $constraint = new AssertCollection([\n        \/\/ Define your fields here\n        'field1' =&gt; new AssertType('string'),\n        'field2' =&gt; new AssertType('int'),\n    ]);\n\n    $validator = Validation::createValidator();\n    $violations = $validator-&gt;validate($data, $constraint);\n\n    if (count($violations) &gt; 0) {\n        $errors = [];\n        foreach ($violations as $violation) {\n            $errors[$violation-&gt;getPropertyPath()][] = $violation-&gt;getMessage();\n        }\n        return $this-&gt;json(['status' =&gt; 'error', 'errors' =&gt; $errors], Response::HTTP_BAD_REQUEST);\n    }\n\n    \/\/ Process your $data here\n\n    return $this-&gt;json(['status' =&gt; 'success', 'data' =&gt; $data]);\n}\n<\/code><\/pre><p>&#36825;&#23558;&#26816;&#26597;JSON&#35831;&#27714;&#20013;&#30340;&#27599;&#20010;&#23383;&#27573;&#26159;&#21542;&#31526;&#21512;&#23450;&#20041;&#30340;&#32422;&#26463;&#26465;&#20214;&#65292;&#24182;&#22788;&#29702;&#20219;&#20309;&#39564;&#35777;&#38169;&#35823;&#12290;<\/p><h2>&#27979;&#35797;&#31471;&#28857;<\/h2><p>&#24403;&#25105;&#20204;&#21019;&#24314;&#20102;&#31471;&#28857;&#21518;&#65292;&#25105;&#20204;&#38656;&#35201;&#23545;&#20854;&#36827;&#34892;&#27979;&#35797;&#12290;&#20320;&#21487;&#20197;&#20351;&#29992;cURL&#12289;Postman&#25110;&#20854;&#20182;API&#27979;&#35797;&#24037;&#20855;&#65306;<\/p><pre><code>curl -X POST -H \"Content-Type: application\/json\" -d '{\"field1\":\"value1\",\"field2\":10}' http:\/\/localhost:8000\/api\/post\n<\/code><\/pre><p>&#36825;&#24212;&#35813;&#20250;&#32473;&#20320;&#25104;&#21151;&#28040;&#24687;&#65292;&#22240;&#20026;&#25105;&#20204;&#22312;&#36825;&#37324;&#21457;&#30340;JSON&#26159;&#26377;&#25928;&#30340;&#12290;<\/p><h2>&#32467;&#35770;<\/h2><p>&#22788;&#29702;Symfony&#20013;&#30340;POST JSON&#35831;&#27714;&#38750;&#24120;&#31616;&#21333;&#12290;&#26694;&#26550;&#20869;&#32622;&#30340;&#21151;&#33021;&#20801;&#35768;&#24744;&#24555;&#36895;&#21019;&#24314;&#20855;&#26377;&#24378;&#22823;&#21644;&#23433;&#20840;&#24615;&#30340;Web&#26381;&#21153;&#65292;&#36825;&#20123;&#26381;&#21153;&#21487;&#20197;&#39640;&#25928;&#22320;&#19982;JSON&#25968;&#25454;&#20132;&#20114;&#12290;<\/p><p>&#35831;&#21153;&#24517;&#27979;&#35797;&#24744;&#30340;&#31471;&#28857;&#24182;&#39564;&#35777;JSON&#27169;&#24335;&#65292;&#20197;&#38450;&#27490;&#19981;&#33391;&#25968;&#25454;&#36827;&#20837;&#31995;&#32479;&#12290;&#25353;&#29031;&#26412;&#25945;&#31243;&#20013;&#30340;&#27493;&#39588;&#36827;&#34892;&#25805;&#20316;&#65292;&#24744;&#24212;&#35813;&#33021;&#22815;&#24456;&#22909;&#22320;&#22788;&#29702;JSON&#22312;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#30340;&#20351;&#29992;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Symfony &#20013;&#22788;&#29702; POST JSON &#35831;&#27714;&#38750;&#24120;&#31616;&#21333;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; <code>Form<\/code> &#31867;&#26469;&#21019;&#24314;&#34920;&#21333;&#65292;&#24182;&#36890;&#36807;&#35843;&#29992; <code>submit()<\/code> &#26041;&#27861;&#25552;&#20132;&#25968;&#25454;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#20363;&#23376;&#65306;<\/p>\n<ol>\n<li>\n<p>&#39318;&#20808;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102; Symfony 5.3 &#25110;&#26356;&#39640;&#29256;&#26412;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#22312;&#39033;&#30446;&#30446;&#24405;&#19979;&#65292;&#25171;&#24320; <code>src\/Controller<\/code> &#30446;&#24405;&#65292;&#28982;&#21518;&#26032;&#24314;&#19968;&#20010;&#21517;&#20026; <code>PostController.php<\/code> &#30340;&#25991;&#20214;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#22312;&#36825;&#20010;&#25511;&#21046;&#22120;&#20013;&#65292;&#20320;&#38656;&#35201;&#23548;&#20837; Symfony &#30340; <code>Form<\/code> &#21644; <code>Request<\/code> &#27169;&#22359;&#12290;&#20363;&#22914;&#65306;<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentFormExtensionCoreTypeTextType;\nuse SymfonyComponentFormExtensionCoreTypeSubmitType;\nuse SymfonyComponentFormExtensionCoreTypeFileType;\nuse SymfonyComponentFormExtensionCoreTypeTextareaType;\nuse SymfonyComponentFormExtensionCoreTypeChoiceType;\nuse SymfonyComponentFormExtensionCoreTypeHiddenType;\nuse SymfonyComponentFormExtensionCoreTypeIntegerType;\n\nclass PostController extends AbstractController\n{\n    public function postAction(Request $request)\n    {\n        \/\/ &#21019;&#24314;&#34920;&#21333;&#23545;&#35937;\n        $form = $this-&gt;createFormBuilder()\n            -&gt;add('title', TextType::class, ['label' =&gt; '&#26631;&#39064;'])\n            -&gt;add('content', TextareaType::class, ['label' =&gt; '&#20869;&#23481;'])\n            -&gt;add('image', FileType::class, ['label' =&gt; '&#22270;&#29255;'])\n            -&gt;add('status', ChoiceType::class, [\n                'choices' =&gt; [0 =&gt; '&#26410;&#23457;&#26680;', 1 =&gt; '&#24050;&#23457;&#26680;'],\n                'label' =&gt; '&#29366;&#24577;'\n            ])\n            -&gt;add('id', HiddenType::class, ['required' =&gt; false])\n            -&gt;getForm();\n\n        \/\/ &#25552;&#20132;&#34920;&#21333;&#24182;&#33719;&#21462;&#25968;&#25454;\n        if ($request-&gt;getMethod() == Request::METHOD_POST) {\n            return $this-&gt;submit($form-&gt;handleRequest($request));\n        }\n\n        return $this-&gt;render('post\/post.html.twig');\n    }\n}<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#22312;&#27169;&#26495;&#25991;&#20214;&#65288;&#22914; <code>post\/post.html.twig<\/code>&#65289;&#20013;&#23450;&#20041;&#35270;&#22270;&#21644;&#36755;&#20986;&#28210;&#26579;&#12290;&#36825;&#23558;&#26174;&#31034;&#19968;&#20010;&#24102;&#26377;&#34920;&#21333;&#30340;&#39029;&#38754;&#65292;&#29992;&#25143;&#21487;&#20197;&#36755;&#20837;&#20182;&#20204;&#24819;&#35201;&#30340;&#20869;&#23481;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#24403;&#29992;&#25143;&#25552;&#20132;&#34920;&#21333;&#26102;&#65292;&#26381;&#21153;&#22120;&#20250;&#25910;&#21040;&#19968;&#20010; POST &#35831;&#27714;&#12290;&#22312;&#36825;&#20010;&#25511;&#21046;&#22120;&#20013;&#65292;&#25105;&#20204;&#21019;&#24314;&#20102;&#19968;&#20010;&#21517;&#20026; <code>postAction<\/code> &#30340;&#26041;&#27861;&#65292;&#23427;&#25509;&#21463;&#19968;&#20010;&#35831;&#27714;&#20316;&#20026;&#21442;&#25968;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#20351;&#29992; <code>createFormBuilder()<\/code> &#26041;&#27861;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340; Form Builder &#23545;&#35937;&#65292;&#23427;&#20801;&#35768;&#25105;&#20204;&#23450;&#20041;&#34920;&#21333;&#23383;&#27573;&#12290;&#22312;&#36825;&#37324;&#65292;&#25105;&#20204;&#23450;&#20041;&#20102;&#19968;&#20123;&#34920;&#21333;&#23383;&#27573;&#65306;&#26631;&#39064;&#12289;&#20869;&#23481;&#12289;&#22270;&#29255;&#12289;&#29366;&#24577;&#21644; ID&#12290;<\/p>\n<\/li>\n<li>\n<p>&#20351;&#29992; <code>create()<\/code> &#26041;&#27861;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#34920;&#21333;&#23545;&#35937;&#23454;&#20363;&#12290;&#36825;&#37324;&#25105;&#20204;&#21019;&#24314;&#20102;&#19968;&#20010;&#22522;&#26412;&#30340;&#34920;&#21333;&#23545;&#35937;&#65292;&#24182;&#28155;&#21152;&#20102;&#20960;&#20010;&#23383;&#27573;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#26368;&#21518;&#65292;&#36820;&#22238;&#19968;&#20010;&#21709;&#24212;&#65292;&#36890;&#24120;&#26159;&#19968;&#20010; HTML &#39029;&#38754;&#65292;&#20854;&#20013;&#21253;&#21547;&#20102;&#29992;&#25143;&#25552;&#20132;&#30340;&#25968;&#25454;&#12290;&#22914;&#26524;&#35831;&#27714;&#26159; GET&#65292;&#21017;&#19981;&#36820;&#22238;&#20219;&#20309;&#20869;&#23481;&#65292;&#32780;&#26159;&#37325;&#23450;&#21521;&#21040;&#29305;&#23450;&#30340;&#39029;&#38754;&#12290;<\/p>\n<\/li>\n<\/ol>\n<p>&#36825;&#23601;&#26159;&#22312; Symfony &#20013;&#22788;&#29702; POST JSON &#35831;&#27714;&#30340;&#22522;&#26412;&#26041;&#27861;&#12290;&#35831;&#27880;&#24847;&#65292;&#36825;&#21482;&#26159;&#19968;&#20010;&#22522;&#30784;&#30340;&#20363;&#23376;&#65292;&#23454;&#38469;&#24212;&#29992;&#20013;&#21487;&#33021;&#20250;&#26377;&#26356;&#22797;&#26434;&#30340;&#34920;&#21333;&#21644;&#39564;&#35777;&#36923;&#36753;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312; Symfony &#20013;&#22788;&#29702; POST JSON &#35831;&#27714;&#28041;&#21450;&#20197;&#19979;&#20960;&#20010;&#27493;&#39588;..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1140","my1js","type-my1js","status-publish","hentry","my1js2nav-symfony"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/1140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=1140"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1140"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1140"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}