{"id":1050,"date":"2025-06-12T11:29:30","date_gmt":"2025-06-12T03:29:30","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1050.html"},"modified":"2025-06-12T11:29:30","modified_gmt":"2025-06-12T03:29:30","slug":"symfony%e8%b7%af%e7%94%b1%e6%9e%9a%e4%b8%be%e5%8f%82%e6%95%b0%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\/1050.html","title":{"rendered":"Symfony\u8def\u7531\u679a\u4e3e\u53c2\u6570\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>&#26631;&#39064;&#65306;Symfony&#36335;&#30001;&#26522;&#20030;&#21442;&#25968;&#65306;&#23454;&#29992;&#25351;&#21335;<\/p>\n<p>&#22312;&#29616;&#20195;Web&#24320;&#21457;&#20013;&#65292;&#36335;&#30001;&#26159;&#24212;&#29992;&#31243;&#24207;&#30340;&#26680;&#24515;&#37096;&#20998;&#65292;&#23427;&#20204;&#23450;&#20041;&#20102;&#22914;&#20309;&#20174;URL&#21040;&#24212;&#29992;&#36923;&#36753;&#30340;&#26144;&#23556;&#20851;&#31995;&#12290;&#22312;Symfony&#26694;&#26550;&#20013;&#65292;&#36335;&#30001;&#21442;&#25968;&#21487;&#20197;&#29992;&#26469;&#20256;&#36882;&#21160;&#24577;&#25968;&#25454;&#65292;&#20174;&#32780;&#23454;&#29616;&#26356;&#28789;&#27963;&#21644;&#20132;&#20114;&#24615;&#30340;&#29992;&#25143;&#30028;&#38754;&#12290;&#28982;&#32780;&#65292;&#20256;&#32479;&#30340;&#36335;&#30001;&#21442;&#25968;&#36890;&#24120;&#26159;&#23383;&#31526;&#20018;&#31867;&#22411;&#65292;&#36825;&#26377;&#26102;&#20250;&#23548;&#33268;&#19968;&#20123;&#38382;&#39064;&#65292;&#20363;&#22914;&#22788;&#29702;&#38750;&#23383;&#31526;&#20018;&#31867;&#22411;&#30340;&#36755;&#20837;&#12290;<\/p>\n<p>&#20026;&#20102;&#35299;&#20915;&#36825;&#20010;&#38382;&#39064;&#65292;Symfony&#24341;&#20837;&#20102;&#26522;&#20030;&#21442;&#25968;&#65288;Enum Parameters&#65289;&#12290;&#26522;&#20030;&#21442;&#25968;&#26159;&#19968;&#31181;&#29305;&#27530;&#30340;&#36335;&#30001;&#21442;&#25968;&#31867;&#22411;&#65292;&#23427;&#21482;&#33021;&#25509;&#21463;&#39044;&#23450;&#20041;&#30340;&#20540;&#21015;&#34920;&#12290;&#36825;&#31181;&#35774;&#35745;&#20351;&#24471;&#36335;&#30001;&#21442;&#25968;&#26356;&#21152;&#23433;&#20840;&#12289;&#21487;&#38752;&#65292;&#24182;&#19988;&#26131;&#20110;&#31649;&#29702;&#21644;&#32500;&#25252;&#12290;<\/p>\n<p>&#19979;&#38754;&#26159;&#19968;&#20123;&#20351;&#29992;Symfony&#36335;&#30001;&#26522;&#20030;&#21442;&#25968;&#30340;&#22522;&#26412;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>\n<p><strong>&#23450;&#20041;&#26522;&#20030;&#31867;<\/strong>&#65306;\n&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#26522;&#20030;&#31867;&#26469;&#34920;&#31034;&#21487;&#33021;&#30340;&#36335;&#30001;&#21442;&#25968;&#20540;&#12290;&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;<code>UserRole<\/code>&#26522;&#20030;&#31867;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Entity\/UserRole.php\nnamespace AppEntity;\n\nuse SymfonyComponentValidatorConstraints as Assert;\n\nclass UserRole\n{\n   const ADMIN = 'admin';\n   const USER = 'user';\n\n   private $value;\n\n   public function __construct(string $value)\n   {\n       if (!in_array($value, [self::ADMIN, self::USER])) {\n           throw new InvalidArgumentException('Invalid role value');\n       }\n       $this-&gt;value = $value;\n   }\n\n   public function getValue(): string\n   {\n       return $this-&gt;value;\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#37197;&#32622;&#36335;&#30001;<\/strong>&#65306;\n&#22312;<code>routing.yml<\/code>&#25991;&#20214;&#20013;&#65292;&#20320;&#21487;&#20197;&#23450;&#20041;&#19968;&#20010;&#24102;&#26377;&#26522;&#20030;&#21442;&#25968;&#30340;&#36335;&#30001;&#65306;<\/p>\n<pre><code class=\"language-yaml\"># config\/routes.yaml\nuser_profile:\n   path: \/profile\/{role}\n   methods: GET\n   controller: AppControllerUserProfileController::showProfile\n   requirements:\n       role: UserRole<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#25511;&#21046;&#22120;&#26041;&#27861;<\/strong>&#65306;\n&#22312;&#25511;&#21046;&#22120;&#20013;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#20381;&#36182;&#27880;&#20837;&#30340;&#26041;&#24335;&#25509;&#25910;&#24182;&#39564;&#35777;&#26522;&#20030;&#21442;&#25968;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/UserProfileController.php\nnamespace AppController;\n\nuse AppEntityUserRole;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\n\nclass UserProfileController extends AbstractController\n{\n   #[Route('\/profile\/{role}', name: 'app_user_profile', methods: ['GET'])]\n   public function showProfile(UserRole $role): Response\n   {\n       \/\/ &#22788;&#29702;&#35282;&#33394;&#20449;&#24687;\n       return $this-&gt;render('user\/profile.html.twig', [\n           'role' =&gt; $role,\n       ]);\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#39564;&#35777;&#35831;&#27714;&#21442;&#25968;<\/strong>&#65306;\n&#20026;&#20102;&#30830;&#20445;&#36335;&#30001;&#21442;&#25968;&#30340;&#26377;&#25928;&#24615;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;Symfony&#30340;Validator&#32452;&#20214;&#26469;&#39564;&#35777;&#35831;&#27714;&#20013;&#30340;&#26522;&#20030;&#21442;&#25968;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#31034;&#20363;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/UserProfileController.php\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\nuse SymfonyComponentValidatorValidatorInterface;\n\nclass UserProfileController extends AbstractController\n{\n   #[Route('\/profile\/{role}', name: 'app_user_profile', methods: ['GET'])]\n   public function showProfile(Request $request, ValidatorInterface $validator): Response\n   {\n       $data = $request-&gt;query-&gt;get('role');\n       $violations = $validator-&gt;validate(new UserRole($data));\n\n       if (count($violations) &gt; 0) {\n           \/\/ &#36820;&#22238;&#38169;&#35823;&#21709;&#24212;\n           return $this-&gt;json(['errors' =&gt; $violations], 400);\n       }\n\n       \/\/ &#22788;&#29702;&#35282;&#33394;&#20449;&#24687;\n       return $this-&gt;render('user\/profile.html.twig', [\n           'role' =&gt; new UserRole($data),\n       ]);\n   }\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312;Symfony&#39033;&#30446;&#20013;&#20351;&#29992;&#26522;&#20030;&#21442;&#25968;&#26469;&#23450;&#20041;&#21644;&#31649;&#29702;&#36335;&#30001;&#21442;&#25968;&#12290;&#36825;&#31181;&#26041;&#24335;&#19981;&#20165;&#25552;&#39640;&#20102;&#23433;&#20840;&#24615;&#65292;&#36824;&#20351;&#36335;&#30001;&#21442;&#25968;&#30340;&#22788;&#29702;&#26356;&#21152;&#31616;&#27905;&#21644;&#39640;&#25928;&#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>&#22312;&#19981;&#26029;&#28436;&#36827;&#30340;Web&#24320;&#21457;&#19990;&#30028;&#20013;&#65292;&#32467;&#21512;&#22810;&#31181;&#32534;&#31243;&#25216;&#26415;&#21487;&#20197;&#31616;&#21270;&#21644;&#20248;&#21270;&#22914;&#20309;&#22788;&#29702;&#24120;&#35265;&#38382;&#39064;&#30340;&#26041;&#27861;&#12290;&#20854;&#20013;&#19968;&#31181;&#22686;&#24378;&#26159;&#20351;&#29992;Symfony&#36335;&#30001;&#20013;&#30340;&#26522;&#20030;&#65288;enum&#65289;&#21151;&#33021;&#65292;&#36825;&#20801;&#35768;&#20320;&#22312;&#36335;&#30001;&#20013;&#23450;&#20041;&#26356;&#32467;&#26500;&#21270;&#19988;&#21487;&#23450;&#20041;&#30340;&#21442;&#25968;&#38598;&#21512;&#12290;&#26080;&#35770;&#26159;&#32463;&#39564;&#20016;&#23500;&#30340;&#19987;&#19994;&#20154;&#22763;&#36824;&#26159;&#26032;&#25509;&#35302;Symfony&#30340;&#20154;&#65292;&#26412;&#25351;&#21335;&#23558;&#25506;&#35752;&#20351;&#29992;&#36335;&#30001;&#26522;&#20030;&#20197;&#25552;&#39640;&#36335;&#30001;&#28165;&#26224;&#24230;&#24182;&#24378;&#21046;&#25191;&#34892;&#21442;&#25968;&#32422;&#26463;&#30340;&#23454;&#38469;&#29992;&#36884;&#12290;<\/p><p>&#22312;PHP 8.1&#20013;&#24341;&#20837;&#30340;&#26522;&#20030;&#65288;enums&#65289;&#20026;&#23450;&#20041;&#19968;&#32452;&#21629;&#21517;&#20540;&#25552;&#20379;&#20102;&#19968;&#31181;&#26041;&#24335;&#12290;&#36890;&#36807;&#22312;Symfony&#36335;&#30001;&#20013;&#20351;&#29992;&#26522;&#20030;&#65292;&#24744;&#21487;&#20197;&#38480;&#21046;&#21442;&#25968;&#21482;&#33021;&#21462;&#39044;&#23450;&#20041;&#30340;&#20540;&#65292;&#20174;&#32780;&#20351;&#20195;&#30721;&#26356;&#21152;&#20581;&#22766;&#21644;&#21487;&#35835;&#12290;&#35753;&#25105;&#20204;&#28145;&#20837;&#25506;&#35752;&#22914;&#20309;&#22312;&#23454;&#38469;&#24212;&#29992;&#20013;&#21033;&#29992;Symfony&#36335;&#30001;&#20013;&#30340;&#26522;&#20030;&#12290;<\/p><h2>&#29702;&#35299;PHP&#20013;&#30340;&#26522;&#20030;&#65288;Enums&#65289;<\/h2><pre><code>enum Status: string {\n    case DRAFT = 'draft';\n    case PUBLISHED = 'published';\n    case ARCHIVED = 'archived';\n}\n<\/code><\/pre><p>&#39318;&#20808;&#65292;&#35831;&#30830;&#20445;&#24744;&#27491;&#22312;&#20351;&#29992;PHP 8.1&#25110;&#26356;&#39640;&#29256;&#26412;&#65292;&#20197;&#20415;&#33021;&#22815;&#23450;&#20041;&#26522;&#20030;&#31867;&#22411;&#12290;&#26522;&#20030;&#21487;&#20197;&#23558;&#19968;&#32452;&#30456;&#20851;&#30340;&#20540;&#36827;&#34892;&#20998;&#31867;&#65292;&#24182;&#19988;&#21487;&#20197;&#36873;&#25321;&#29992;&#23383;&#31526;&#20018;&#25110;&#25972;&#25968;&#26469;&#34920;&#31034;&#12290;<\/p><h2>&#37197;&#32622;Symfony&#36335;&#30001;&#20351;&#29992;&#26522;&#20030;<\/h2><p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;Article&#23454;&#20307;&#65292;&#24182;&#19988;&#24819;&#35201;&#23450;&#20041;&#19968;&#20010;&#36335;&#30001;&#65292;&#29992;&#20110;&#26681;&#25454;&#20854;&#29366;&#24577;&#36807;&#28388;&#25991;&#31456;&#12290;&#20511;&#21161;&#26522;&#20030;&#65292;&#36825;&#21487;&#20197;&#22823;&#24133;&#31616;&#21270;&#23454;&#29616;&#36807;&#31243;&#12290;<\/p><h3>&#23450;&#20041;&#26522;&#20030;<\/h3><pre><code>enum ArticleStatus: string {\n    case DRAFT = 'draft';\n    case PUBLISHED = 'published';\n    case ARCHIVED = 'archived';\n}\n<\/code><\/pre><p>&#25105;&#20204;&#24050;&#32463;&#23450;&#20041;&#20102;&#19968;&#20010;&#26522;&#20030;&#12290;<code>ArticleStatus<\/code>&#37027;&#23558;&#29992;&#20110;&#25351;&#23450;&#25991;&#31456;&#30340;&#29366;&#24577;&#12290;<\/p><h3>&#22312;Symfony&#20013;&#35268;&#21010;&#36335;&#32447;&#12290;<\/h3><p>&#22312;Symfony&#30340;&#36335;&#30001;&#37197;&#32622;&#20013;&#65292;&#38656;&#35201;&#35774;&#32622;&#19968;&#20010;&#21442;&#25968;&#65292;&#35813;&#21442;&#25968;&#24517;&#39035;&#26159;&#19968;&#20010;&#26522;&#20030;&#20540;&#12290;&#36825;&#37324;&#26159;&#19968;&#20010;&#31616;&#21270;&#29256;&#30340;&#20363;&#23376;&#65292;&#22312;&#25511;&#21046;&#22120;&#20013;&#65306;<\/p><pre><code>use SymfonyComponentRoutingAnnotationRoute;\nuse AppEnumArticleStatus;\n\nclass ArticleController \n{\n    #[Route('\/articles\/{status}', name: 'article_by_status')]\n    public function listByStatus(ArticleStatus $status) {\n        \/\/ ... your logic here\n    }\n}\n<\/code><\/pre><p>&#35831;&#27880;&#24847;&#65292;&#20197;&#19979;&#30340;&#20449;&#24687;&#21487;&#33021;&#20250;&#23545;&#24744;&#26377;&#25152;&#24110;&#21161;&#12290;<code>$status<\/code>&#21442;&#25968;&#22312;&#12290;<code>listByStatus<\/code>&#26041;&#27861;&#30340;&#31867;&#22411;&#25552;&#31034;&#20026;&#12290;<code>ArticleStatus<\/code>Symfony &#20250;&#33258;&#21160;&#23558;&#35831;&#27714;&#21442;&#25968;&#36716;&#25442;&#20026; ArticleStatus &#24120;&#37327;&#30340;&#23454;&#20363;&#12290;<\/p><h3>&#22788;&#29702;&#36335;&#30001;&#26522;&#20030;&#21442;&#25968;<\/h3><p>&#29616;&#22312;&#65292;&#22914;&#26524;&#20320;&#35775;&#38382;&#36335;&#30001;&ldquo;\/articles\/draft&rdquo;&#65292;Symfony &#23558;&#21305;&#37197;&#36825;&#20010;&#12290;<code>DRAFT<\/code>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#24744;&#30340;&#24847;&#24605;&#65292;&#35831;&#24744;&#37325;&#26032;&#25551;&#36848;&#19968;&#19979;&#24744;&#30340;&#38382;&#39064;&#12290;<code>ArticleStatus<\/code>&#26522;&#20030;&#20540;&#26080;&#25928;&#20250;&#23548;&#33268;&#36820;&#22238;&#29366;&#24577;&#30721;&#20026;404&#65292;&#22240;&#20026;&#35813;&#20540;&#19981;&#21305;&#37197;&#39044;&#23450;&#20041;&#30340;&#26522;&#20030;case&#12290;<\/p><p>&#36825;&#23454;&#29616;&#20102;&#20004;&#20010;&#30446;&#26631;&#65306;&#19968;&#26159;&#21487;&#20197;&#33258;&#21160;&#39564;&#35777;&#26377;&#25928;&#30340;&#26522;&#20030;&#20540;&#65292;&#20108;&#26159;&#20351;&#24471;&#26041;&#27861;&#31614;&#21517;&#21464;&#24471;&#33258;&#25551;&#36848;&#12290;<\/p><h2>&#27880;&#20876;&#21644;&#35299;&#20915;&#26522;&#20030;&#22312;&#36335;&#30001;&#20013;&#30340;&#38382;&#39064;<\/h2><p>&#22312;&#20351;&#29992;Symfony&#36335;&#30001;&#27880;&#20876;&#26522;&#20030;&#21442;&#25968;&#26102;&#65292;&#35831;&#30830;&#20445;&#26356;&#26032;&#26381;&#21153;&#37197;&#32622;&#65292;&#36890;&#24120;&#20301;&#20110;&#26381;&#21153;&#37197;&#32622;&#25991;&#20214;&#20013;&#12290;<code>config\/services.yaml<\/code>&#36825;&#21487;&#33021;&#21253;&#25324;&#22914;&#26524;&#38656;&#35201;&#30340;&#35805;&#30340;&#33258;&#23450;&#20041;&#21442;&#25968;&#20540;&#35299;&#26512;&#22120;&#12290;<\/p><h2>&#39640;&#32423;&#29992;&#27861;&#65306;&#33258;&#23450;&#20041;&#32422;&#26463;&#21644;&#36923;&#36753;<\/h2><p>&#20351;&#29992;&#26522;&#20030;&#31867;&#22411;&#65292;&#36824;&#21487;&#20197;&#21152;&#20837;&#39069;&#22806;&#30340;&#39564;&#35777;&#36923;&#36753;&#12290;&#36825;&#21487;&#20197;&#19982;Symfony&#30340;Validator&#32452;&#20214;&#32039;&#23494;&#20851;&#32852;&#65292;&#20351;&#24471;&#22797;&#26434;&#30340;&#39564;&#35777;&#35268;&#21017;&#33021;&#22815;&#20197;&#32467;&#26500;&#21270;&#21644;&#19968;&#33268;&#30340;&#26041;&#24335;&#36827;&#34892;&#24067;&#23616;&#12290;<\/p><p>&#26522;&#20030;&#24102;&#26469;&#30340;&#28165;&#26224;&#24230;&#38750;&#24120;&#24378;&#22823;&#65292;&#23558;&#20854;&#28155;&#21152;&#21040;Symfony&#20013;&#20195;&#34920;&#20102;&#23545;&#36335;&#30001;&#21442;&#25968;&#29305;&#24615;&#21644;&#39564;&#35777;&#28789;&#27963;&#24615;&#21644;&#31616;&#27905;&#24615;&#30340;&#26174;&#33879;&#39134;&#36291;&#12290;<\/p><h2>&#26368;&#21518;&#30340;&#30041;&#35328;<\/h2><p>&#22312;&#32467;&#26463;&#25351;&#21335;&#20043;&#21069;&#65292;&#20197;&#19979;&#26159;&#19968;&#20123;&#20851;&#38190;&#35201;&#28857;&#30340;&#24635;&#32467;&#65306;<\/p><p>&#20195;&#30721;&#22522;&#32500;&#25252;&#24471;&#21040;&#20102;&#25913;&#36827;&#65292;&#22240;&#20026;&#32467;&#26500;&#28165;&#26224;&#19988;&#38477;&#20302;&#20102;&#24322;&#24120;&#21457;&#29983;&#30340;&#39118;&#38505;&#12290;<\/p><p>Symfony&#30340;&#36335;&#30001;&#21464;&#24471;&#26356;&#21152;&#20581;&#22766;&#65292;&#20869;&#32622;&#20102;&#39564;&#35777;&#26816;&#26597;&#12290;<\/p><p>&#26522;&#20030;&#30340;&#20351;&#29992;&#21487;&#20197;&#29983;&#25104;&#33258;&#25991;&#26723;&#20195;&#30721;&#12290;<\/p><p>&#26522;&#20030;&#31867;&#22411;&#26356;&#20542;&#21521;&#20110;&#20351;&#29992;&#19968;&#32452;&#24120;&#35265;&#30340;&#25968;&#25454;&#38598;&#65292;&#20174;&#32780;&#23454;&#29616;&#26356;&#21152;&#19968;&#33268;&#30340;&#25968;&#25454;&#20351;&#29992;&#12290;<\/p><p>&#26522;&#20030;&#37325;&#26032;&#23450;&#20041;&#20102;&#32467;&#26500;&#65292;&#24182;&#24341;&#20837;&#20102;&#19968;&#31181;&#22788;&#29702;&#29305;&#23450;&#25968;&#25454;&#38598;&#30340;&#31867;&#22411;&#23433;&#20840;&#26041;&#24335;&#12290;&#32467;&#26524;&#26159;&#65292;&#19968;&#30524;&#23601;&#33021;&#30475;&#25026;&#26356;&#26131;&#32500;&#25252;&#19988;&#19981;&#26131;&#20986;&#29616;&#36816;&#34892;&#26102;&#38169;&#35823;&#30340;&#20195;&#30721;&#12290;&#34429;&#28982;&#21333;&#29420;&#20351;&#29992;&#26522;&#20030;&#26377;&#24456;&#22810;&#22909;&#22788;&#65292;&#20294;&#23558;&#20854;&#19982;Symfony&#30340;&#36335;&#30001;&#31995;&#32479;&#32806;&#21512;&#36827;&#19968;&#27493;&#25193;&#23637;&#20102;&#20854;&#20215;&#20540;&#65292;&#20351;&#20320;&#30340;Symfony&#24212;&#29992;&#26356;&#20855;&#20248;&#38597;&#24615;&#12290;&#19968;&#26086;&#23454;&#29616;&#65292;&#36825;&#20010;&#27169;&#24335;&#23558;&#25104;&#20026;&#24744;&#24320;&#21457;&#24037;&#20855;&#21253;&#20013;&#30340;&#23453;&#36149;&#36164;&#20135;&#65292;&#30830;&#20445;&#20195;&#30721;&#21487;&#38752;&#24615;&#21644;&#24212;&#29992;&#31243;&#24207;&#21151;&#33021;&#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>&#20320;&#22909;&#65281;&#22312;&#20351;&#29992; Symfony &#26500;&#24314;&#20225;&#19994;&#32423;&#24212;&#29992;&#26102;&#65292;&#20102;&#35299;&#21644;&#29087;&#24713;&#36335;&#30001;&#65288;Route&#65289;&#26159;&#33267;&#20851;&#37325;&#35201;&#30340;&#12290;&#20197;&#19979;&#26159;&#19968;&#20123;&#20851;&#20110;&#22914;&#20309;&#35774;&#32622; Symfony &#36335;&#30001;&#26522;&#20030;&#21442;&#25968;&#30340;&#23454;&#29992;&#25351;&#21335;&#65306;<\/p>\n<h3>1. &#23433;&#35013; Symfony<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#23433;&#35013;&#20102;&#26368;&#26032;&#29256;&#26412;&#30340; Symfony&#12290;&#20320;&#21487;&#20197;&#36890;&#36807; Composer &#23433;&#35013;&#23427;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer create-project --no-interaction symfony\/framework-standard-edition app-name<\/code><\/pre>\n<h3>2. &#37197;&#32622; YAML &#25991;&#20214;<\/h3>\n<p>&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>app.yaml<\/code> &#30340;&#25991;&#20214;&#65292;&#24182;&#23558;&#20197;&#19979;&#20869;&#23481;&#28155;&#21152;&#21040;&#20854;&#20013;&#65306;<\/p>\n<pre><code class=\"language-yaml\">services:\n  web:\n    ...\n    providers:\n      - { service: RouteGenerator, arguments: [ 'routes' ] }<\/code><\/pre>\n<p>&#36825;&#37324;&#65292;&#25105;&#20204;&#23450;&#20041;&#20102;&#19968;&#20010;&#26381;&#21153; <code>web<\/code>&#65292;&#24182;&#22312;&#20854;&#19978;&#19979;&#25991;&#20013;&#37197;&#32622;&#20102;&#19968;&#20010; <code>RouteGenerator<\/code> &#26381;&#21153;&#65292;&#35813;&#26381;&#21153;&#23558;&#29992;&#20110;&#29983;&#25104;&#36335;&#30001;&#12290;<\/p>\n<h3>3. &#21019;&#24314; Routes &#25991;&#20214;<\/h3>\n<p>&#25509;&#19979;&#26469;&#65292;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>routes.yml<\/code> &#30340;&#25991;&#20214;&#65292;&#24182;&#23558;&#20854;&#25918;&#32622;&#22312;&#39033;&#30446;&#30340;&#26681;&#30446;&#24405;&#19979;&#12290;&#36825;&#20010;&#25991;&#20214;&#21253;&#21547;&#20102;&#25152;&#26377;&#38656;&#35201;&#30340;&#36335;&#30001;&#23450;&#20041;&#12290;<\/p>\n<pre><code class=\"language-yaml\">version: ^5.0\n\nrouters:\n  routes:\n    default: ~\n\n# &#31034;&#20363;&#25968;&#25454;\npaths:\n  paths: ~\n\nroutes:\n  web:\n    resource: \"@Web\/ControllerBundle\/Resources\/config\/route\/web.xml\"\n    prefix: \/web\n    defaults:\n      controller: '@WebControllerBundle::default'\n\n  # &#20854;&#20182;&#36335;&#30001;...<\/code><\/pre>\n<h3>4. &#29983;&#25104;&#40664;&#35748;&#36335;&#30001;<\/h3>\n<p>&#36816;&#34892; <code>symfony generate:router<\/code> &#21629;&#20196;&#26469;&#29983;&#25104;&#40664;&#35748;&#30340;&#36335;&#30001;&#26144;&#23556;&#65292;&#36825;&#23558;&#26681;&#25454; <code>routes.yml<\/code> &#25991;&#20214;&#20013;&#30340;&#25968;&#25454;&#33258;&#21160;&#29983;&#25104;&#12290;<\/p>\n<pre><code class=\"language-bash\">symfony generate:router<\/code><\/pre>\n<h3>5. &#20351;&#29992;&#36335;&#30001;&#26522;&#20030;&#21442;&#25968;<\/h3>\n<p>&#22312; <code>routes.yml<\/code> &#25991;&#20214;&#20013;&#65292;&#20026;&#27599;&#20010;&#36335;&#30001;&#28155;&#21152;&#19968;&#20010;&#21517;&#31216;&#65292;&#20197;&#20415;&#21487;&#20197;&#36731;&#26494;&#22320;&#20174;&#21517;&#31216;&#20013;&#33719;&#21462;&#36335;&#30001;&#20449;&#24687;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#35201;&#35775;&#38382; <code>\/api\/products<\/code> &#36335;&#30001;&#65292;&#21487;&#20197;&#36825;&#26679;&#23450;&#20041;&#65306;<\/p>\n<pre><code class=\"language-yaml\">routes:\n  api_products:\n    resource: \"@Api\/ProductBundle\/Resources\/config\/route\/api_product.xml\"\n    prefix: \/api\/products\n    defaults:\n      controller: '@ApiProductController:productController'<\/code><\/pre>\n<p>&#36825;&#37324;&#30340; <code>prefix<\/code> &#21442;&#25968;&#20801;&#35768;&#20320;&#22312; URL &#20013;&#25351;&#23450;&#36335;&#30001;&#21069;&#32512;&#12290;<\/p>\n<h3>6. &#20351;&#29992; Route Generator &#26381;&#21153;<\/h3>\n<p>&#29616;&#22312;&#65292;&#24403;&#26500;&#24314;&#24212;&#29992;&#31243;&#24207;&#26102;&#65292;Symphony &#20250;&#33258;&#21160;&#35843;&#29992; <code>RouteGenerator<\/code> &#26381;&#21153;&#24182;&#20351;&#29992;&#25552;&#20379;&#30340;&#21442;&#25968;&#29983;&#25104;&#36335;&#30001;&#12290;&#36825;&#36890;&#24120;&#24847;&#21619;&#30528;&#26080;&#38656;&#25163;&#21160;&#32534;&#20889;&#22797;&#26434;&#30340;&#36335;&#30001;&#36923;&#36753;&#12290;<\/p>\n<h3>7. &#27979;&#35797;&#36335;&#30001;<\/h3>\n<p>&#26368;&#21518;&#65292;&#27979;&#35797;&#19968;&#19979;&#26032;&#28155;&#21152;&#30340;&#36335;&#30001;&#26159;&#21542;&#25353;&#39044;&#26399;&#24037;&#20316;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807;&#35775;&#38382; <code>\/api\/products<\/code> &#26469;&#39564;&#35777;&#36335;&#30001;&#26159;&#21542;&#27491;&#30830;&#29983;&#25104;&#12290;<\/p>\n<pre><code class=\"language-bash\">curl http:\/\/localhost:8000\/api\/products<\/code><\/pre>\n<p>&#20197;&#19978;&#23601;&#26159;&#22312; Symfony &#20013;&#20351;&#29992;&#36335;&#30001;&#26522;&#20030;&#21442;&#25968;&#30340;&#22522;&#26412;&#27969;&#31243;&#12290;&#24076;&#26395;&#36825;&#20123;&#25351;&#21335;&#33021;&#24110;&#21161;&#20320;&#26356;&#22909;&#22320;&#29702;&#35299;&#21644;&#31649;&#29702;&#20320;&#30340;&#20225;&#19994;&#32423;&#24212;&#29992;&#30340;&#36335;&#30001;&#31995;&#32479;&#65281;&#22914;&#26524;&#20320;&#26377;&#29305;&#23450;&#30340;&#38382;&#39064;&#25110;&#24819;&#35201;&#26356;&#28145;&#20837;&#30340;&#25351;&#23548;&#65292;&#35831;&#38543;&#26102;&#25552;&#38382;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#26631;&#39064;&#65306;Symfony&#36335;&#30001;&#26522;&#20030;&#21442;&#25968;&#65306;&#23454;&#29992;&#25351;&#21335; &#22312;&#038;#29..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1050","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\/1050","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=1050"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1050"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1050"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}