{"id":1064,"date":"2025-06-12T11:47:15","date_gmt":"2025-06-12T03:47:15","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1064.html"},"modified":"2025-06-12T11:47:15","modified_gmt":"2025-06-12T03:47:15","slug":"%e5%9c%a8symfony%e4%b8%ad%e8%bf%94%e5%9b%9ejson%e5%93%8d%e5%ba%94%ef%bc%9a%e5%ae%9e%e7%94%a8%e6%8c%87%e5%8d%97","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1064.html","title":{"rendered":"\u5728Symfony\u4e2d\u8fd4\u56deJSON\u54cd\u5e94\uff1a\u5b9e\u7528\u6307\u5357"},"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;&#36820;&#22238; JSON &#21709;&#24212;&#26159;&#19968;&#20010;&#38750;&#24120;&#24120;&#35265;&#30340;&#38656;&#27714;&#65292;&#29305;&#21035;&#26159;&#22312;&#26500;&#24314; API &#26102;&#12290;&#20197;&#19979;&#26159;&#19968;&#20123;&#23454;&#29992;&#30340;&#27493;&#39588;&#21644;&#31034;&#20363;&#20195;&#30721;&#26469;&#24110;&#21161;&#20320;&#23454;&#29616;&#36825;&#19968;&#28857;&#12290;<\/p>\n<h3>1. &#23433;&#35013;&#24517;&#35201;&#30340;&#21253;<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102; <code>symfony\/http-foundation<\/code> &#21253;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807; Composer &#26469;&#23433;&#35013;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/http-foundation<\/code><\/pre>\n<h3>2. &#21019;&#24314;&#25511;&#21046;&#22120;<\/h3>\n<p>&#25509;&#19979;&#26469;&#65292;&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;&#35831;&#27714;&#24182;&#36820;&#22238; JSON &#21709;&#24212;&#12290;&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#31616;&#21333;&#30340; RESTful API&#65292;&#29992;&#20110;&#33719;&#21462;&#29992;&#25143;&#20449;&#24687;&#12290;<\/p>\n<h4>&#31034;&#20363;&#25511;&#21046;&#22120;&#20195;&#30721;<\/h4>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationJsonResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\n\nclass UserController extends AbstractController\n{\n    \/**\n     * @Route(\"\/users\/{id}\", name=\"get_user\")\n     *\/\n    public function getUser($id)\n    {\n        \/\/ &#27169;&#25311;&#20174;&#25968;&#25454;&#24211;&#20013;&#33719;&#21462;&#29992;&#25143;&#20449;&#24687;\n        $user = [\n            'id' =&gt; $id,\n            'name' =&gt; 'John Doe',\n            'email' =&gt; 'john.doe@example.com'\n        ];\n\n        \/\/ &#36820;&#22238; JSON &#21709;&#24212;\n        return new JsonResponse($user, 200);\n    }\n}<\/code><\/pre>\n<h3>3. &#37197;&#32622;&#36335;&#30001;<\/h3>\n<p>&#30830;&#20445;&#20320;&#30340;&#36335;&#30001;&#37197;&#32622;&#27491;&#30830;&#12290;&#36890;&#24120;&#65292;&#36825;&#20250;&#22312; <code>config\/routes.yaml<\/code> &#25991;&#20214;&#20013;&#23436;&#25104;&#65306;<\/p>\n<pre><code class=\"language-yaml\">app:\n    resource: '@App\/Controller\/'\n    type: annotation<\/code><\/pre>\n<h3>4. &#27979;&#35797; API<\/h3>\n<p>&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#24037;&#20855;&#65288;&#22914; Postman &#25110; cURL&#65289;&#26469;&#27979;&#35797;&#36825;&#20010; API&#12290;<\/p>\n<h4>&#20351;&#29992; cURL<\/h4>\n<pre><code class=\"language-bash\">curl \"http:\/\/localhost:8000\/users\/1\"<\/code><\/pre>\n<p>&#20320;&#24212;&#35813;&#20250;&#30475;&#21040;&#31867;&#20284;&#20197;&#19979;&#30340; JSON &#21709;&#24212;&#65306;<\/p>\n<pre><code class=\"language-json\">{\n    \"id\": 1,\n    \"name\": \"John Doe\",\n    \"email\": \"john.doe@example.com\"\n}<\/code><\/pre>\n<h3>5. &#33258;&#23450;&#20041; HTTP &#29366;&#24577;&#30721;<\/h3>\n<p>&#22914;&#26524;&#20320;&#38656;&#35201;&#36820;&#22238;&#19981;&#21516;&#30340; HTTP &#29366;&#24577;&#30721;&#65292;&#21487;&#20197;&#20351;&#29992; <code>JsonResponse<\/code> &#30340;&#26500;&#36896;&#20989;&#25968;&#20013;&#30340;&#31532;&#20108;&#20010;&#21442;&#25968;&#65306;<\/p>\n<pre><code class=\"language-php\">public function getUser($id)\n{\n    \/\/ &#27169;&#25311;&#20174;&#25968;&#25454;&#24211;&#20013;&#33719;&#21462;&#29992;&#25143;&#20449;&#24687;\n    $user = [\n        'id' =&gt; $id,\n        'name' =&gt; 'John Doe',\n        'email' =&gt; 'john.doe@example.com'\n    ];\n\n    \/\/ &#36820;&#22238;&#29305;&#23450;&#29366;&#24577;&#30721;&#30340; JSON &#21709;&#24212;\n    return new JsonResponse($user, 201);\n}<\/code><\/pre>\n<p>&#36825;&#26679;&#65292;&#24403;&#20320;&#35775;&#38382; <code>\/users\/1<\/code> &#26102;&#65292;&#20320;&#20250;&#24471;&#21040;&#19968;&#20010;&#29366;&#24577;&#30721;&#20026; 201 &#30340;&#21709;&#24212;&#65292;&#34920;&#31034;&#36164;&#28304;&#24050;&#25104;&#21151;&#21019;&#24314;&#12290;<\/p>\n<h3>&#24635;&#32467;<\/h3>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312; Symfony &#20013;&#36731;&#26494;&#22320;&#36820;&#22238; JSON &#21709;&#24212;&#12290;&#36825;&#20010;&#36807;&#31243;&#21253;&#25324;&#23433;&#35013;&#24517;&#35201;&#30340;&#21253;&#12289;&#21019;&#24314;&#25511;&#21046;&#22120;&#12289;&#37197;&#32622;&#36335;&#30001;&#20197;&#21450;&#27979;&#35797; API&#12290;&#24076;&#26395;&#36825;&#20123;&#20449;&#24687;&#23545;&#20320;&#26377;&#24110;&#21161;&#65281;<\/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>&#24403;&#28041;&#21450;&#21040;&#21019;&#24314;&#24403;&#20195;&#30340;Web&#24212;&#29992;&#31243;&#24207;&#26102;&#65292;&#25968;&#25454;&#20132;&#25442;&#36890;&#24120;&#37319;&#29992;JSON&#26684;&#24335;&#12290;&#22312;Symfony&#26694;&#26550;&#20013;&#65292;&#29983;&#25104;JSON&#21709;&#24212;&#26159;&#19968;&#39033;&#20851;&#38190;&#21151;&#33021;&#65292;&#29992;&#20110;API&#21644;&#20219;&#20309;&#19982;&#23458;&#25143;&#31471;JavaScript&#36890;&#20449;&#30340;&#24212;&#29992;&#31243;&#24207;&#12290;&#22312;&#36825;&#31687;&#25351;&#21335;&#20013;&#65292;&#24744;&#23558;&#23398;&#20064;&#22914;&#20309;&#20174;&#24744;&#30340;Symfony&#24212;&#29992;&#39640;&#25928;&#22320;&#36820;&#22238;JSON&#21709;&#24212;&#12290;<\/p><h3>&#29702;&#35299;JSON&#21709;&#24212;<\/h3><p>JSON&#65288;JavaScript &#23545;&#35937;&#34920;&#31034;&#27861;&#65289;&#26159;&#19968;&#31181;&#36731;&#37327;&#32423;&#30340;&#25968;&#25454;&#20132;&#25442;&#26684;&#24335;&#65292;&#26131;&#20110;&#20154;&#31867;&#38405;&#35835;&#21644;&#32534;&#20889;&#65292;&#20063;&#26131;&#20110;&#26426;&#22120;&#35299;&#26512;&#21644;&#29983;&#25104;&#12290;&#22312;Web&#24212;&#29992;&#20013;&#65292;JSON&#20316;&#20026;&#23458;&#25143;&#31471;&#19982;&#26381;&#21153;&#22120;&#20043;&#38388;&#20256;&#36755;&#25968;&#25454;&#30340;&#22522;&#30707;&#12290;<\/p><h2>&#35774;&#32622;&#19968;&#20010;Symfony&#39033;&#30446;<\/h2><p>&#22312;&#36820;&#22238;JSON&#21709;&#24212;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#24050;&#35774;&#32622;Symfony&#39033;&#30446;&#12290;&#22914;&#26524;&#27809;&#26377;&#65292;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;Symfony&#21629;&#20196;&#34892;&#24037;&#20855;&#21019;&#24314;&#19968;&#20010;&#65306;<\/p><pre><code>symfony new my_project --webapp<\/code><\/pre><p>&#24403;&#20320;&#26377;&#19968;&#20010;&#39033;&#30446;&#20934;&#22791;&#23601;&#32490;&#21518;&#65292;&#23601;&#21487;&#20197;&#24320;&#22987;&#21457;&#36865;JSON&#21709;&#24212;&#20102;&#12290;<\/p><h2>&#21019;&#24314;&#25511;&#21046;&#22120;<\/h2><p>&#22312;Symfony&#20013;&#65292;&#25511;&#21046;&#22120;&#36127;&#36131;&#22788;&#29702;&#23458;&#25143;&#31471;&#35831;&#27714;&#24182;&#36820;&#22238;&#36866;&#24403;&#30340;&#21709;&#24212;&#12290;&#35201;&#36820;&#22238;JSON&#21709;&#24212;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#12290;&#20197;&#19979;&#26159;&#21019;&#24314;&#25511;&#21046;&#22120;&#30340;&#27493;&#39588;&#65306;<\/p><pre><code>php bin\/console make:controller ApiController<\/code><\/pre><p>&#36825;&#23558;&#20250;&#29983;&#25104;&#19968;&#20010;ApiController&#20197;&#21450;&#23545;&#24212;&#30340;&#27169;&#26495;&#25991;&#20214;&#12290;<\/p><h2>&#36820;&#22238;JSON&#21709;&#24212;&#12290;<\/h2><p>&#25511;&#21046;&#22120;&#23433;&#35013;&#21518;&#65292;&#24744;&#29616;&#22312;&#21487;&#20197;&#23398;&#20064;&#22914;&#20309;&#36820;&#22238;JSON&#25968;&#25454;&#12290;Symfony&#25552;&#20379;&#20102;&#19968;&#20010;&#21517;&#20026;JsonResponse&#30340;&#20855;&#20307;&#31867;&#26469;&#23454;&#29616;&#36825;&#19968;&#28857;&#12290;<\/p><h3>&#20351;&#29992;JsonResponse<\/h3><p>&#26368;&#31616;&#21333;&#30340;&#36820;&#22238;JSON&#21709;&#24212;&#30340;&#26041;&#24335;&#26159;&#20351;&#29992;JsonResponse&#31867;&#12290;&#20197;&#19979;&#26159;&#22312;&#24744;&#30340;ApiController&#20013;&#30340;&#19968;&#20010;&#31034;&#20363;&#26041;&#27861;&#65306;<\/p><pre><code>use SymfonyComponentHttpFoundationJsonResponse;\n\npublic function index(): JsonResponse\n{\n    $data = [\n        'success' =&gt; true,\n        'payload' =&gt; [\n            'message' =&gt; 'Data fetched successfully',\n            'data' =&gt; [...] \/\/ your data here\n        ],\n    ];\n    return new JsonResponse($data);\n}<\/code><\/pre><p>&#35813;&#26041;&#27861;&#36820;&#22238;&#19968;&#20010;JSON&#21709;&#24212;&#65292;&#20854;&#20013;&#21253;&#21547;&#25104;&#21151;&#29366;&#24577;&#21644;&#25968;&#25454;&#21253;&#12290;<\/p><h3>&#20351;&#29992; JSON &#26041;&#27861;&#12290;<\/h3><p>&#22312;&#19981;&#38656;&#35201;&#26102;&#65292;&#24744;&#36890;&#24120;&#19981;&#24517;&#30452;&#25509;&#23454;&#20363;&#21270;JsonResponse&#23545;&#35937;&#12290;Symfony&#25511;&#21046;&#22120;&#22522;&#31867;&#25552;&#20379;&#20102;&#20415;&#21033;&#30340;json&#26041;&#27861;&#65306;<\/p><pre><code>use SymfonyBundleFrameworkBundleControllerAbstractController;\n\nclass ApiController extends AbstractController\n{\n    public function index(): JsonResponse\n    {\n        $data = [...] \/\/ your data here\n        return $this-&gt;json($data);\n    }\n}<\/code><\/pre><p>JSON&#26041;&#27861;&#20250;&#35774;&#32622;Content-Type&#22836;&#20026;&#8217;application\/json&#8217;&#65292;&#24182;&#24110;&#20320;&#23545;&#25968;&#25454;&#36827;&#34892;JSON&#32534;&#30721;&#12290;<\/p><h2>&#24207;&#21015;&#21270;&#21644;&#32452;<\/h2><p>&#26377;&#26102;&#65292;&#24744;&#24819;&#35201;&#36820;&#22238;&#30340;JSON&#25968;&#25454;&#24182;&#19981;&#26159;&#25968;&#32452;&#65292;&#32780;&#26159;&#23545;&#35937;&#65292;&#29305;&#21035;&#26159;&#22312;&#22788;&#29702;&#23454;&#20307;&#26102;&#12290;&#36825;&#26102;&#20505;Symfony Serializer&#32452;&#20214;&#23601;&#27966;&#19978;&#29992;&#22330;&#20102;&#12290;&#23427;&#21487;&#20197;&#24110;&#21161;&#24744;&#23558;&#23545;&#35937;&#24207;&#21015;&#21270;&#20026;JSON&#12290;<\/p><h3>&#20351;&#29992;&#24207;&#21015;&#21270;&#32452;&#20214;<\/h3><p>&#23433;&#35013;&#32452;&#20214;&#20351;&#29992; Composer&#65306;<\/p><pre><code>composer require symfony\/serializer<\/code><\/pre><p>&#28982;&#21518;&#65292;&#24207;&#21015;&#21270;&#23545;&#35937;&#65306;<\/p><pre><code>use SymfonyComponentSerializerSerializerInterface;\n\nclass ApiController extends AbstractController\n{\n    private $serializer;\n    public function __construct(SerializerInterface $serializer)\n    {\n        $this-&gt;serializer = $serializer;\n    }\n    \n    public function index(): JsonResponse\n    {\n        $object = ... \/\/ your object here\n        $jsonContent = $this-&gt;serializer-&gt;serialize($object, 'json');\n\n        return new JsonResponse($jsonContent, 200, [], true);\n    }\n}<\/code><\/pre><p>&#26368;&#21518;&#19968;&#20010;&#26500;&#36896;&#20989;&#25968;&#21442;&#25968;&#21578;&#35785;Symfony&#65292;&#25968;&#25454;&#24050;&#32463;JSON&#32534;&#30721;&#20102;&#12290;<\/p><h3>&#24207;&#21015;&#21270;&#32452;<\/h3><p>&#20351;&#29992;&#24207;&#21015;&#21270;&#32452;&#65292;&#24744;&#21487;&#20197;&#25351;&#23450;&#23545;&#35937;&#30340;&#21738;&#20123;&#23646;&#24615;&#24212;&#34987;&#24207;&#21015;&#21270;&#20026;JSON&#12290;&#24403;&#24744;&#24819;&#26292;&#38706;&#25968;&#25454;&#23376;&#38598;&#26102;&#65292;&#36825;&#23588;&#20854;&#26377;&#29992;&#12290;<\/p><pre><code>use SymfonyComponentSerializerAnnotationGroups;\n\nclass YourEntity\n{\n    \/**\n     *  @Groups(\"list\")\n     *\/\n    private $id;\n\n    \/**\n     * @Groups({\"list\", \"detail\"})\n     *\/\n    private $name;\n\n    \/\/ ... other properties and methods\n}\n\n\/\/ In your ApiController:\n$jsonContent = $this-&gt;serializer-&gt;serialize($object, 'json', ['groups' =&gt; 'list']);<\/code><\/pre><p>&#21482;&#22312;&ldquo;&#21015;&#34920;&rdquo;&#32452;&#20013;&#30340;&#23646;&#24615;&#25165;&#20250;&#34987;&#24207;&#21015;&#21270;&#21040;&#21709;&#24212;&#20013;&#12290;&#35831;&#30830;&#20445;&#22312;&#24207;&#21015;&#21270;&#37197;&#32622;&#20013;&#21551;&#29992;&#20998;&#32452;&#12290;<\/p><h2>&#27979;&#35797;&#24744;&#30340;JSON&#21709;&#24212;<\/h2><p>&#22312;&#32534;&#20889;&#36820;&#22238;JSON&#21709;&#24212;&#30340;&#20195;&#30721;&#20043;&#21518;&#65292;&#20320;&#24212;&#35813;&#20889;&#21151;&#33021;&#27979;&#35797;&#12290;<\/p><pre><code>use SymfonyBundleFrameworkBundleTestWebTestCase;\nclass ApiControllerTest extends WebTestCase\n{\n    public function testIndex()\n    {\n        $client = static::createClient();\n        \n        \/\/... Test logic goes here\n    }\n}<\/code><\/pre><p>&#27979;&#35797;&#30830;&#20445;&#24744;&#30340;API&#36820;&#22238;&#27491;&#30830;&#30340;&#20869;&#23481;&#31867;&#22411;&#21644;&#29366;&#24577;&#30721;&#65292;&#20197;&#21450;&#39044;&#26399;&#30340;JSON&#32467;&#26500;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#20171;&#32461;&#20102;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#36820;&#22238;JSON&#21709;&#24212;&#30340;&#22810;&#31181;&#26041;&#27861;&#65292;&#24378;&#35843;&#20102;&#24314;&#31435;&#28165;&#26224;&#21644;&#19968;&#33268;API&#36890;&#20449;&#30340;&#37325;&#35201;&#24615;&#12290;&#24212;&#29992;&#36825;&#20123;&#31574;&#30053;&#26469;&#26500;&#24314;&#20855;&#26377;&#24378;&#22823;&#19988;&#21487;&#25193;&#23637;&#24615;&#30340;Symfony&#24212;&#29992;&#31243;&#24207;&#65292;&#24182;&#26377;&#25928;&#22320;&#19982;&#23458;&#25143;&#31471;&#36827;&#34892;&#20132;&#20114;&#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;PHP&#26694;&#26550;Symfony&#20013;&#21019;&#24314;&#24182;&#36820;&#22238;JSON&#21709;&#24212;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#25805;&#20316;&#65292;&#29305;&#21035;&#26159;&#22312;&#22788;&#29702;API&#26102;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#22312;Symfony&#20013;&#23454;&#29616;&#36825;&#19968;&#21151;&#33021;&#30340;&#35814;&#32454;&#27493;&#39588;&#21644;&#19968;&#20123;&#26368;&#20339;&#23454;&#36341;&#12290;<\/p>\n<h3>&#27493;&#39588;1: &#21019;&#24314;&#25511;&#21046;&#22120;<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#22312;&#19968;&#20010;&#25511;&#21046;&#22120;&#25991;&#20214;&#65288;&#36890;&#24120;&#20026;<code>Controller.php<\/code>&#65289;&#20013;&#23450;&#20041;&#19968;&#20010;&#26041;&#27861;&#26469;&#22788;&#29702;HTTP&#35831;&#27714;&#65292;&#24182;&#36820;&#22238;JSON&#25968;&#25454;&#12290;&#19979;&#38754;&#30340;&#20363;&#23376;&#23637;&#31034;&#20102;&#22914;&#20309;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026;<code>IndexController<\/code>&#30340;&#25511;&#21046;&#22120;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationJsonResponse;\nuse SymfonyComponentHttpFoundationRequest;\n\nclass IndexController extends AbstractController\n{\n    public function indexAction(Request $request): JsonResponse\n    {\n        \/\/ &#36825;&#37324;&#21487;&#20197;&#28155;&#21152;&#20219;&#20309;&#19994;&#21153;&#36923;&#36753;\n\n        return new JsonResponse(['message' =&gt; 'Hello, World!']);\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#23450;&#20041;&#20102;&#19968;&#20010;&#21517;&#20026;<code>indexAction<\/code>&#30340;&#26041;&#27861;&#65292;&#23427;&#25509;&#21463;&#19968;&#20010;&#35831;&#27714;&#23545;&#35937;&#20316;&#20026;&#21442;&#25968;&#12290;&#28982;&#21518;&#20351;&#29992;<code>new JsonResponse()<\/code>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;JSON&#21709;&#24212;&#23454;&#20363;&#65292;&#24182;&#23558;&#28040;&#24687;&#8221;Hello, World!&#8221;&#20316;&#20026;&#21709;&#24212;&#30340;&#25968;&#25454;&#12290;<\/p>\n<h3>&#27493;&#39588;2: &#22312;&#27169;&#26495;&#20013;&#26174;&#31034;JSON&#21709;&#24212;<\/h3>\n<p>&#25509;&#19979;&#26469;&#65292;&#25105;&#20204;&#38656;&#35201;&#30830;&#20445;&#24212;&#29992;&#31243;&#24207;&#33021;&#22815;&#27491;&#30830;&#22320;&#35299;&#26512;&#21644;&#28210;&#26579;&#36825;&#20123;JSON&#25968;&#25454;&#12290;&#36825;&#36890;&#24120;&#38656;&#35201;&#36890;&#36807;&#27169;&#26495;&#24341;&#25806;&#26469;&#23436;&#25104;&#65292;&#20363;&#22914;&#20351;&#29992;Twig&#12290;&#22312;<code>app\/Resources\/views\/index.html.twig<\/code>&#25991;&#20214;&#20013;&#25554;&#20837;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-twig\">{{ include('json_response.json') }}\n{% endtemplate %}<\/code><\/pre>\n<p>&#36825;&#37324;&#30340;&#20851;&#38190;&#26159;&#21253;&#25324;&#19968;&#20010;<code>&lt;include&gt;<\/code>&#26631;&#31614;&#65292;&#20854;&#20013;&#21253;&#21547;&#21517;&#20026;<code>json_response.json<\/code>&#30340;&#27169;&#26495;&#21464;&#37327;&#12290;&#24403;&#26381;&#21153;&#22120;&#25910;&#21040;&#35831;&#27714;&#21518;&#65292;&#20250;&#33258;&#21160;&#21152;&#36733;&#36825;&#20010;&#27169;&#26495;&#24182;&#23558;&#25968;&#25454;&#20256;&#36882;&#36827;&#21435;&#12290;<\/p>\n<h3>&#23454;&#29992;&#25351;&#21335;<\/h3>\n<ul>\n<li><strong>&#32534;&#30721;&#35268;&#33539;<\/strong>&#65306;&#30830;&#20445;&#20320;&#30340;JSON&#25968;&#25454;&#32467;&#26500;&#28165;&#26224;&#19988;&#36981;&#24490;RESTful API&#26631;&#20934;&#12290;<\/li>\n<li><strong>&#38169;&#35823;&#22788;&#29702;<\/strong>&#65306;&#32771;&#34385;&#36820;&#22238;400 Bad Request&#12289;401 Unauthorized&#31561;HTTP&#29366;&#24577;&#30721;&#26469;&#25552;&#31034;&#29992;&#25143;&#38169;&#35823;&#12290;<\/li>\n<li><strong>&#23433;&#20840;&#24615;<\/strong>&#65306;&#30830;&#20445;JSON&#25968;&#25454;&#30340;&#23433;&#20840;&#24615;&#65292;&#36991;&#20813;&#30452;&#25509;&#26292;&#38706;&#25935;&#24863;&#20449;&#24687;&#22914;&#23494;&#30721;&#12290;<\/li>\n<li><strong>&#24615;&#33021;&#32771;&#37327;<\/strong>&#65306;&#22914;&#26524;&#22823;&#37327;&#25968;&#25454;&#38656;&#35201;&#36755;&#20986;&#65292;&#32771;&#34385;&#20351;&#29992;&#32531;&#23384;&#25216;&#26415;&#25552;&#39640;&#24615;&#33021;&#12290;<\/li>\n<\/ul>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationJsonResponse;\nuse SymfonyComponentHttpFoundationRequest;\n\nclass IndexController extends AbstractController\n{\n    public function indexAction(Request $request): JsonResponse\n    {\n        $data = [\n            'name' =&gt; 'John Doe',\n            'email' =&gt; 'john.doe@example.com'\n        ];\n\n        return new JsonResponse($data);\n    }\n}\n\n\/\/ json_response.json\n[\n  {\n    \"name\": \"John Doe\",\n    \"email\": \"john.doe@example.com\"\n  }\n]<\/code><\/pre>\n<p>&#36825;&#27573;&#20195;&#30721;&#23637;&#31034;&#20102;&#19968;&#20010;&#31616;&#21333;&#30340;JSON&#25968;&#32452;&#65292;&#21253;&#21547;&#20102;&#22995;&#21517;&#21644;&#30005;&#23376;&#37038;&#20214;&#22320;&#22336;&#12290;&#20320;&#21487;&#20197;&#26681;&#25454;&#23454;&#38469;&#38656;&#27714;&#35843;&#25972;&#25968;&#25454;&#32467;&#26500;&#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;&#36820;&#22238; JSON &#21709;&#24212;&#26159;&#19968;&#20010;&#38750;&#24120;&#24120;&#35265;&#30340;&#038;#386..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1064","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\/1064","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=1064"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1064"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1064"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1064"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}