{"id":1044,"date":"2025-06-12T11:20:59","date_gmt":"2025-06-12T03:20:59","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1044.html"},"modified":"2025-06-12T11:20:59","modified_gmt":"2025-06-12T03:20:59","slug":"symfony-%e8%b7%af%e7%94%b1%e5%8c%b9%e9%85%8d%e8%a1%a8%e8%be%be%e5%bc%8f%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\/1044.html","title":{"rendered":"Symfony \u8def\u7531\u5339\u914d\u8868\u8fbe\u5f0f\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>&#12298;Symfony &#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;&#65306;&#23454;&#29992;&#25351;&#21335;&#12299;<\/p>\n<p>&#22312;&#26500;&#24314;&#29616;&#20195; Web &#24212;&#29992;&#31243;&#24207;&#26102;&#65292;&#36335;&#30001;&#26159;&#19981;&#21487;&#25110;&#32570;&#30340;&#19968;&#37096;&#20998;&#12290;Symfony &#25552;&#20379;&#20102;&#24378;&#22823;&#30340;&#36335;&#30001;&#31995;&#32479;&#65292;&#20801;&#35768;&#24320;&#21457;&#32773;&#23450;&#20041;&#21644;&#31649;&#29702;&#24212;&#29992;&#31243;&#24207;&#30340; URL&#12290;&#26412;&#25991;&#23558;&#20026;&#20320;&#25552;&#20379;&#20851;&#20110; Symfony &#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;&#30340;&#23454;&#29992;&#25351;&#21335;&#12290;<\/p>\n<h3>1. &#22522;&#26412;&#27010;&#24565;<\/h3>\n<p>&#22312; Symfony &#20013;&#65292;&#36335;&#30001;&#26159;&#19968;&#20010; URI &#21040;&#25511;&#21046;&#22120;&#26041;&#27861;&#30340;&#26144;&#23556;&#12290;&#27599;&#20010;&#36335;&#30001;&#37117;&#26377;&#19968;&#20010;&#21807;&#19968;&#30340;&#21517;&#31216;&#65292;&#24182;&#19988;&#21487;&#20197;&#20351;&#29992;&#22810;&#31181;&#21305;&#37197;&#27169;&#24335;&#26469;&#21305;&#37197;&#35831;&#27714;&#12290;<\/p>\n<h4>&#21305;&#37197;&#27169;&#24335;<\/h4>\n<ul>\n<li><strong><code>^\/path\/to\/resource$<\/code><\/strong>&#65306;&#31934;&#30830;&#21305;&#37197;&#36335;&#24452;&#12290;<\/li>\n<li><strong><code>\/path\/to\/resource\/{variable}<\/code><\/strong>&#65306;&#21160;&#24577;&#21305;&#37197;&#21464;&#37327;&#12290;<\/li>\n<li><strong><code>\/path\/to\/resource\/{variable:pattern}<\/code><\/strong>&#65306;&#21160;&#24577;&#21305;&#37197;&#21464;&#37327;&#24182;&#36827;&#34892;&#27491;&#21017;&#34920;&#36798;&#24335;&#21305;&#37197;&#12290;<\/li>\n<li><strong><code>\/path\/to\/resource\/{variable?}<\/code><\/strong>&#65306;&#21487;&#36873;&#21442;&#25968;&#12290;<\/li>\n<li><strong><code>\/path\/to\/resource\/{variable...}<\/code><\/strong>&#65306;&#21464;&#38271;&#21442;&#25968;&#12290;<\/li>\n<\/ul>\n<h3>2. &#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20123;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312; Symfony &#20013;&#23450;&#20041;&#21644;&#20351;&#29992;&#36825;&#20123;&#36335;&#30001;&#21305;&#37197;&#27169;&#24335;&#12290;<\/p>\n<h4>&#23450;&#20041;&#36335;&#30001;<\/h4>\n<pre><code class=\"language-yaml\"># config\/routes.yaml\napp_homepage:\n    path: \/\n    defaults:\n        _controller: AppControllerHomeController::indexAction\n\napp_user_profile:\n    path: \/user\/{id}\n    defaults:\n        _controller: AppControllerUserController::showAction\n        id: null<\/code><\/pre>\n<h4>&#25511;&#21046;&#22120;&#26041;&#27861;<\/h4>\n<pre><code class=\"language-php\">\/\/ src\/App\/Controller\/HomeController.php\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationResponse;\n\nclass HomeController extends AbstractController\n{\n    public function indexAction()\n    {\n        return new Response('Welcome to the homepage!');\n    }\n}\n\n\/\/ src\/App\/Controller\/UserController.php\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\n\nclass UserController extends AbstractController\n{\n    \/**\n     * @Route(\"\/user\/{id}\", name=\"user_show\")\n     *\/\n    public function showAction($id)\n    {\n        if ($id === null) {\n            return $this-&gt;render('user\/index.html.twig');\n        } else {\n            return $this-&gt;render('user\/show.html.twig', ['id' =&gt; $id]);\n        }\n    }\n}<\/code><\/pre>\n<h3>3. &#20351;&#29992;&#36335;&#30001;<\/h3>\n<p>&#24403;&#20320;&#38656;&#35201;&#22788;&#29702;&#19981;&#21516;&#31867;&#22411;&#30340;&#35831;&#27714;&#26102;&#65292;&#21487;&#20197;&#20351;&#29992;&#19981;&#21516;&#30340;&#36335;&#30001;&#21305;&#37197;&#27169;&#24335;&#12290;&#20363;&#22914;&#65306;<\/p>\n<ul>\n<li><code>^\/home<\/code>&#65306;&#31934;&#30830;&#21305;&#37197;&#26681;&#36335;&#24452;&#12290;<\/li>\n<li><code>\/user\/123<\/code>&#65306;&#21160;&#24577;&#21305;&#37197;&#29992;&#25143; ID&#12290;<\/li>\n<li><code>\/user\/<\/code>&#65306;&#21487;&#36873;&#21442;&#25968;&#65292;&#34920;&#31034;&#29992;&#25143; ID &#21487;&#20197;&#20026;&#31354;&#12290;<\/li>\n<li><code>\/admin\/*<\/code>&#65306;&#21464;&#38271;&#21442;&#25968;&#65292;&#34920;&#31034;&#20219;&#20309;\/admin&#36335;&#24452;&#19979;&#30340;&#25152;&#26377;&#20869;&#23481;&#12290;<\/li>\n<\/ul>\n<p>&#36890;&#36807;&#21512;&#29702;&#37197;&#32622;&#36335;&#30001;&#65292;&#20320;&#21487;&#20197;&#30830;&#20445;&#20320;&#30340;&#24212;&#29992;&#31243;&#24207;&#33021;&#22815;&#27491;&#30830;&#22320;&#21709;&#24212;&#21508;&#31181;&#35831;&#27714;&#65292;&#24182;&#25552;&#20379;&#19968;&#33268;&#30340;&#29992;&#25143;&#20307;&#39564;&#12290;<\/p>\n<h3>&#24635;&#32467;<\/h3>\n<p>&#22312; Symfony &#20013;&#65292;&#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;&#26159;&#23454;&#29616;&#24378;&#22823;&#36335;&#30001;&#21151;&#33021;&#30340;&#20851;&#38190;&#12290;&#20102;&#35299;&#21644;&#28789;&#27963;&#36816;&#29992;&#36825;&#20123;&#27169;&#24335;&#65292;&#21487;&#20197;&#24110;&#21161;&#20320;&#26356;&#26377;&#25928;&#22320;&#32452;&#32455;&#21644;&#31649;&#29702;&#20320;&#30340;&#24212;&#29992;&#31243;&#24207;&#12290;&#24076;&#26395;&#36825;&#31687;&#25351;&#21335;&#33021;&#24110;&#21161;&#20320;&#22312;&#20320;&#30340; Symfony &#39033;&#30446;&#20013;&#25104;&#21151;&#24212;&#29992;&#36825;&#20123;&#30693;&#35782;&#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>Symfony&#65292;&#19968;&#20010;&#27969;&#34892;&#30340;PHP&#26694;&#26550;&#65292;&#29992;&#20110;&#26500;&#24314;web&#24212;&#29992;&#31243;&#24207;&#65292;&#25552;&#20379;&#20102;&#39640;&#25928;&#30340;&#21644;&#28789;&#27963;&#30340;&#36335;&#30001;&#31995;&#32479;&#12290;&#29702;&#35299;Symfony&#30340;&#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;&#23545;&#20110;&#35774;&#32622;&#19968;&#20010;&#24341;&#20154;&#27880;&#30446;&#19988;&#21709;&#24212;&#36805;&#36895;&#30340;&#24212;&#29992;&#31243;&#24207;&#33267;&#20851;&#37325;&#35201;&#12290;&#26412;&#25351;&#21335;&#23558;&#24102;&#20320;&#28145;&#20837;&#20102;&#35299;Symfony&#20013;&#30340;&#36335;&#30001;&#21305;&#37197;&#65292;&#36890;&#36807;&#23454;&#38469;&#31034;&#20363;&#21644;&#26368;&#20339;&#23454;&#36341;&#65292;&#24110;&#21161;&#20320;&#25484;&#25569;&#36825;&#19968;&#25216;&#33021;&#12290;&#26080;&#35770;&#20320;&#26159;Symfony&#30340;&#26032;&#25163;&#36824;&#26159;&#24076;&#26395;&#20248;&#21270;&#36335;&#30001;&#31574;&#30053;&#30340;&#20154;&#65292;&#36825;&#37117;&#23558;&#26159;&#19968;&#20221;&#23453;&#36149;&#30340;&#36164;&#28304;&#12290;<\/p><h2>&#36335;&#30001;&#65288;Routing&#65289;&#22312;Symfony&#20013;&#25351;&#30340;&#26159;&#23450;&#20041;&#24212;&#29992;&#31243;&#24207;&#22914;&#20309;&#19982;&#29992;&#25143;&#20132;&#20114;&#30340;&#35268;&#21017;&#21644;&#27169;&#24335;&#12290;&#36825;&#20123;&#35268;&#21017;&#29992;&#20110;&#21305;&#37197;URL&#21040;&#25511;&#21046;&#22120;&#20989;&#25968;&#65292;&#20174;&#32780;&#25552;&#20379;&#30456;&#24212;&#30340;&#21151;&#33021;&#25110;&#25968;&#25454;&#12290;&#36890;&#36807;&#37197;&#32622;&#36335;&#30001;&#65292;&#24320;&#21457;&#20154;&#21592;&#21487;&#20197;&#30830;&#20445;&#24212;&#29992;&#33021;&#22815;&#21709;&#24212;&#29992;&#25143;&#30340;&#35831;&#27714;&#24182;&#36820;&#22238;&#27491;&#30830;&#30340;&#39029;&#38754;&#12289;&#25968;&#25454;&#25110;&#20854;&#20182;&#36164;&#28304;&#12290;<\/h2><p>&#36335;&#30001;&#26159;&#23558;URL&#26144;&#23556;&#21040;&#24212;&#29992;&#31243;&#24207;&#29305;&#23450;&#25511;&#21046;&#22120;&#30340;&#36807;&#31243;&#12290;&#22312;Symfony&#20013;&#65292;&#36335;&#30001;&#21487;&#20197;&#22312;YAML&#12289;XML&#25110;PHP&#25991;&#20214;&#20013;&#37197;&#32622;&#65292;&#24182;&#21253;&#25324;&#21508;&#31181;&#26465;&#20214;&#65292;&#36825;&#20123;&#26465;&#20214;&#24517;&#39035;&#28385;&#36275;&#20197;&#35302;&#21457;&#20851;&#32852;&#30340;&#25511;&#21046;&#22120;&#12290;<\/p><h2>&#22522;&#26412;&#36335;&#30001;&#37197;&#32622;<\/h2><p>&#22312;&#28145;&#20837;&#36335;&#30001;&#34920;&#36798;&#24335;&#20043;&#21069;&#65292;&#35753;&#25105;&#20204;&#20808;&#20102;&#35299;&#19968;&#19979;&#36335;&#30001;&#37197;&#32622;&#30340;&#22522;&#26412;&#27010;&#24565;&#65306;<\/p><pre><code>app:\n    path: \/blog\/{slug}\n    controller: AppControllerBlogController::show\n    requirements:\n        slug: '[a-zA-Z1-9-]+'<\/code><\/pre><p>&#36825;&#20010;YAML&#37197;&#32622;&#23558;URL&#27169;&#24335;&#26144;&#23556;&#21040;&#25511;&#21046;&#22120;&#65292;&#24182;&#20351;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#35774;&#32622;{slug}&#21442;&#25968;&#30340;&#32422;&#26463;&#26465;&#20214;&#12290;<\/p><h2>&#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;<\/h2><p>&#36335;&#30001;&#37197;&#32622;&#20013;&#30340;&#35201;&#27714;&#38190;&#20801;&#35768;&#20351;&#29992;&#34920;&#36798;&#24335;&#36827;&#34892;&#26356;&#22797;&#26434;&#30340;&#21305;&#37197;&#12290;&#20197;&#19979;&#26159;&#24120;&#35265;&#29992;&#20363;&#65306;<\/p><p>&#33258;&#23450;&#20041;&#27169;&#24335;&#21305;&#37197;&#65306;&#21033;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#26469;&#38480;&#21046;&#21487;&#25509;&#21463;&#30340;&#21442;&#25968;&#20540;&#12290;<\/p><p>URL&#21442;&#25968;&#21482;&#33021;&#21253;&#21547;&#23383;&#27597;&#21644;&#25968;&#23383;&#12290;<\/p><p>&#25968;&#20540;&#32422;&#26463;&#65306;&#29992;&#20110;&#21442;&#25968;&#30340;&#24378;&#21046;&#24615;&#25968;&#23383;&#20540;&#65292;&#36890;&#24120;&#29992;&#20110;&#26631;&#35782;&#31526;&#12290;<\/p><p>&#20197;&#19979;&#31034;&#20363;&#28436;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992;&#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;&#20165;&#20801;&#35768;&#25968;&#23383;&#20540;&#20316;&#20026;ID&#21442;&#25968;&#30340;&#29992;&#36884;&#12290;<\/p><pre><code>article_show:\n    path: \/article\/{id}\n    controller: AppControllerArticleController::show\n    requirements:\n        id: 'd+'<\/code><\/pre><p>&#29616;&#22312;&#65292;&#35753;&#25105;&#20204;&#25506;&#32034;&#36825;&#20123;&#34920;&#36798;&#22914;&#20309;&#29992;&#20110;&#26356;&#28789;&#27963;&#30340;&#36335;&#30001;&#12290;<\/p><h2>&#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;&#30340;&#23454;&#38469;&#24212;&#29992;<\/h2><h3>&#39564;&#35777;&#21644;&#32422;&#26463;<\/h3><p>&#20351;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#21487;&#20197;&#22312;&#36335;&#30001;&#20013;&#23454;&#29616;&#39564;&#35777;&#12290;&#19968;&#20010;&#24120;&#35265;&#30340;&#20363;&#23376;&#26159;&#26085;&#26399;&#39564;&#35777;&#65292;&#22914;&#19979;&#25152;&#31034;&#65306;<\/p><pre><code>event_show:\n    path: \/event\/{date}\n    controller: AppControllerEventController::show\n    requirements:\n        date: 'd{4}-d{2}-d{2}'<\/code><\/pre><p>&#36825;&#30830;&#20445;&#26085;&#26399;&#36981;&#24490;&#29305;&#23450;&#26684;&#24335;&#65288;YYYY-MM-DD&#65289;&#12290;<\/p><h3>&#22797;&#26434;&#30340;&#36335;&#30001;&#22330;&#26223;<\/h3><p>&#23545;&#20110;&#26356;&#22797;&#26434;&#30340;&#22330;&#26223;&#65292;&#20363;&#22914;&#22522;&#20110;&#35821;&#35328;&#30340;&#36335;&#32447;&#65292;&#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;&#38750;&#24120;&#39640;&#25928;&#65306;<\/p><pre><code>localized_blog:\n    path: \/{locale}\/blog\/{slug}\n    controller: AppControllerBlogController::show\n    requirements:\n        locale: 'en|fr|de'\n        slug: '[a-zA-Z1-9-]+'<\/code><\/pre><p>&#22312;&#36825;&#37324;&#65292;locale&#21442;&#25968;&#20165;&#38480;&#20110;&#19977;&#20010;&#35821;&#35328;&#36873;&#39033;&#65306;&#33521;&#35821;&#12289;&#27861;&#35821;&#21644;&#24503;&#35821;&#12290;<\/p><h3>&#40664;&#35748;&#20540;<\/h3><p>&#35774;&#32622;&#36335;&#30001;&#21442;&#25968;&#30340;&#40664;&#35748;&#20540;&#21487;&#20197;&#31616;&#21270;&#36335;&#30001;&#21644;&#25511;&#21046;&#22120;&#12290;&#34429;&#28982;&#19981;&#26159;&#21305;&#37197;&#34920;&#36798;&#24335;&#65292;&#20294;&#40664;&#35748;&#20540;&#22312;&#36335;&#30001;&#37197;&#32622;&#20013;&#36215;&#30528;&#37325;&#35201;&#20316;&#29992;&#65306;<\/p><pre><code>blog_index:\n    path: \/blog\/{page}\n    controller: AppControllerBlogController::index\n    requirements:\n        page: 'd+'\n    defaults:\n        page: 1<\/code><\/pre><p>&#22914;&#26524;&#27809;&#26377;&#25351;&#23450;&#39029;&#30721;&#65292;&#36335;&#30001;&#40664;&#35748;&#20250;&#36339;&#36716;&#21040;&#31532;&#19968;&#39029;&#12290;<\/p><h2>&#39640;&#32423;&#36335;&#30001;&#37197;&#32622;<\/h2><p>&#38543;&#30528;&#24744;&#30340;&#24212;&#29992;&#35268;&#27169;&#30340;&#25193;&#22823;&#65292;&#24744;&#21487;&#33021;&#38656;&#35201;&#26356;&#22797;&#26434;&#30340;&#36335;&#30001;&#36923;&#36753;&#12290;Symfony&#30340;&#36335;&#30001;&#32452;&#20214;&#20026;&#24744;&#25552;&#20379;&#31649;&#29702;&#22797;&#26434;&#38656;&#27714;&#25152;&#38656;&#30340;&#28789;&#27963;&#24615;&#12290;<\/p><h3>&#35201;&#27714;&#30340;&#32467;&#21512;<\/h3><p>&#23558;&#19981;&#21516;&#31867;&#22411;&#30340;&#38656;&#27714;&#32467;&#21512;&#36215;&#26469;&#21487;&#20197;&#26377;&#25928;&#22320;&#32553;&#23567;&#21305;&#37197;URL&#30340;&#33539;&#22260;&#65306;<\/p><pre><code>user_profile:\n    path: \/{username}\/{tab}\n    controller: AppControllerUserController::profile\n    requirements:\n        username: '[a-zA-Z-]+' \n        tab: '(posts|comments|likes)'<\/code><\/pre><p>&#21442;&#25968;tab&#19982;&#19968;&#32452;&#29305;&#23450;&#20540;&#21305;&#37197;&#12290;<\/p><h3>&#22522;&#20110;&#26465;&#20214;&#30340;&#36335;&#30001;<\/h3><p>&#22312;&#26576;&#20123;&#24773;&#20917;&#19979;&#65292;&#24744;&#21487;&#33021;&#24076;&#26395;&#36335;&#30001;&#30340;&#24212;&#29992;&#26465;&#20214;&#21270;&#12290;Symfony&#20801;&#35768;&#20351;&#29992;condition&#38190;&#19979;&#30340;&#34920;&#36798;&#24335;&#12290;<\/p><pre><code>mobile_homepage:\n    path: \/\n    controller: AppControllerMobileController::homepage\n    condition: \"context.getMethod() in ['GET'] and request.headers.get('User-Agent') matches '\/mobile\/i' \"<\/code><\/pre><p>&#35813;&#36335;&#30001;&#20165;&#22312;&#29992;&#25143;&#20195;&#29702;&#24314;&#35758;&#20026;&#31227;&#21160;&#35774;&#22791;&#26102;&#21305;&#37197;&#12290;<\/p><h2>&#35843;&#35797;&#36335;&#30001;<\/h2><p>Symfony&#33258;&#24102;&#24037;&#20855;&#24110;&#21161;&#20320;&#35843;&#35797;&#36335;&#30001;&#37197;&#32622;&#65306;<\/p><p>&#22312;&#24320;&#21457;&#29615;&#22659;&#20013;&#65292;Symfony&#30340;webProfiler&#25552;&#20379;&#20102;&#19968;&#20010;&#21487;&#35270;&#21270;&#30028;&#38754;&#29992;&#20110;&#36335;&#30001;&#35843;&#35797;&#12290;<\/p><p>&#35843;&#35797;&#21629;&#20196;&#65306;The<code>bin\/console debug:router<\/code>&#22312;&#32456;&#31471;&#20013;&#36816;&#34892;&#21629;&#20196;&#21487;&#20197;&#21015;&#20986;&#25152;&#26377;&#37197;&#32622;&#30340;&#36335;&#30001;&#21450;&#20854;&#35814;&#32454;&#20449;&#24687;&#12290;<\/p><p>&#20351;&#29992;&#36825;&#20123;&#24037;&#20855;&#65292;&#24744;&#21487;&#20197;&#39564;&#35777;&#24744;&#30340;&#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;&#26159;&#21542;&#25353;&#39044;&#26399;&#24037;&#20316;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#26377;&#25928;&#30340;&#36335;&#30001;&#23545;&#20110;&#21019;&#24314;&#24178;&#20928;&#19988;&#21487;&#25193;&#23637;&#30340;&#24212;&#29992;&#31243;&#24207;&#33267;&#20851;&#37325;&#35201;&#12290;Symfony &#25552;&#20379;&#20102;&#19968;&#20010;&#24378;&#22823;&#30340;&#36335;&#30001;&#31995;&#32479;&#65292;&#24403;&#19982;&#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;&#32467;&#21512;&#20351;&#29992;&#26102;&#65292;&#25552;&#20379;&#20102;&#23545; URL &#19982;&#25511;&#21046;&#22120;&#20851;&#32852;&#30340;&#26497;&#24378;&#25511;&#21046;&#33021;&#21147;&#12290;&#36981;&#24490;&#26412;&#25351;&#21335;&#20013;&#30340;&#25351;&#23548;&#21644;&#31034;&#20363;&#65292;&#24744;&#24212;&#35813;&#33021;&#22815;&#20026;&#24744;&#30340; Symfony &#24212;&#29992;&#31243;&#24207;&#23454;&#29616;&#21508;&#31181;&#36335;&#30001;&#38656;&#27714;&#12290;<\/p><p>&#36335;&#30001;&#26159;&#20219;&#20309;Web&#24212;&#29992;&#31243;&#24207;&#30340;&#22522;&#30784;&mdash;&mdash;&#25484;&#25569;&#23427;&#20204;&#21487;&#20197;&#20351;&#24744;&#24341;&#23548;&#29992;&#25143;&#21040;&#20182;&#20204;&#38656;&#35201;&#30340;&#22320;&#26041;&#65292;&#20174;&#32780;&#25552;&#21319;&#29992;&#25143;&#20307;&#39564;&#21644;&#24212;&#29992;&#23433;&#20840;&#24615;&#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;&#65292;&#36335;&#30001;&#21305;&#37197;&#26159;&#19968;&#31181;&#38750;&#24120;&#24378;&#22823;&#30340;&#21151;&#33021;&#65292;&#21487;&#20197;&#24110;&#21161;&#24744;&#36731;&#26494;&#22320;&#32452;&#32455;&#21644;&#31649;&#29702;&#24212;&#29992;&#31243;&#24207;&#20013;&#30340;&#36164;&#28304;&#35775;&#38382;&#12290;&#23427;&#20801;&#35768;&#24744;&#20351;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#26469;&#23450;&#20041;&#21738;&#20123; URL &#22320;&#22336;&#24212;&#35813;&#34987;&#26144;&#23556;&#21040;&#29305;&#23450;&#30340;&#25511;&#21046;&#22120;&#26041;&#27861;&#12290;<\/p>\n<h3>&#22914;&#20309;&#20351;&#29992;&#36335;&#30001;&#21305;&#37197;<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#24744;&#30340;&#39033;&#30446;&#24050;&#23433;&#35013;&#20102; <code>symfony<\/code> &#21253;&#65292;&#24182;&#19988;&#24050;&#32463;&#21551;&#29992;&#20102;&#36335;&#30001;&#21305;&#37197;&#12290;&#24744;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;&#21629;&#20196;&#36827;&#34892;&#23433;&#35013;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/symfony<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#25171;&#24320;&#24744;&#30340;&#24212;&#29992;&#30340; <code>config\/services.yml<\/code> &#25991;&#20214;&#65292;&#28155;&#21152;&#20197;&#19979;&#26381;&#21153;&#65306;<\/p>\n<pre><code class=\"language-yaml\">router:\n    resource: \"@App\/Router\/Routes.php\"\n    prefix: \/api<\/code><\/pre>\n<p>&#29616;&#22312;&#65292;&#25105;&#20204;&#21487;&#20197;&#36890;&#36807;&#32534;&#20889;&#19968;&#20123;&#31616;&#21333;&#30340;&#36335;&#30001;&#35268;&#21017;&#26469;&#27979;&#35797;&#36335;&#30001;&#21305;&#37197;&#30340;&#21151;&#33021;&#12290;&#35753;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#25511;&#21046;&#22120;&#24182;&#23450;&#20041;&#20004;&#20010;&#36335;&#30001;&#65306;<\/p>\n<ol>\n<li><strong>URL:<\/strong> <code>\/users\/{id}<\/code><\/li>\n<li><strong>Method:<\/strong> GET, POST<\/li>\n<\/ol>\n<p>&#25509;&#19979;&#26469;&#65292;&#25105;&#20204;&#23558;&#20026;&#36825;&#20004;&#20010;&#36335;&#30001;&#32534;&#20889;&#30456;&#24212;&#30340;&#25511;&#21046;&#22120;&#21160;&#20316;&#12290;&#35831;&#30830;&#20445;&#24744;&#30340;&#25511;&#21046;&#22120;&#20301;&#20110; <code>src\/AppBundle\/Controller<\/code> &#30446;&#24405;&#19979;&#12290;<\/p>\n<h4>&#32534;&#20889;&#36335;&#30001;&#25511;&#21046;&#22120;<\/h4>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppController;\n\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\n\nclass UserController extends AbstractController\n{\n    public function indexAction()\n    {\n        return new Response('Hello, World!');\n    }\n\n    public function showAction($id)\n    {\n        \/\/ &#24744;&#21487;&#20197;&#22312;&#36825;&#37324;&#23454;&#29616;&#26681;&#25454; $id &#26174;&#31034;&#29992;&#25143;&#30340;&#36923;&#36753;\n    }\n}<\/code><\/pre>\n<h4>&#21019;&#24314;&#36335;&#30001;&#25991;&#20214;<\/h4>\n<p>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#25991;&#20214;&#22841; <code>src\/AppBundle\/Route<\/code> &#24182;&#22312;&#20854;&#20013;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026; <code>Routes.php<\/code> &#30340;&#25991;&#20214;&#12290;&#23558;&#19978;&#38754;&#30340;&#20195;&#30721;&#22797;&#21046;&#21040;&#35813;&#25991;&#20214;&#20013;&#12290;<\/p>\n<h4>&#32534;&#20889;&#36335;&#30001;&#37197;&#32622;<\/h4>\n<p>&#22312; <code>routes.yml<\/code> &#25991;&#20214;&#20013;&#65292;&#35774;&#32622;&#36335;&#30001;&#37197;&#32622;&#22914;&#19979;&#65306;<\/p>\n<pre><code class=\"language-yml\"># routes.yml\n\napi:\n  resources:\n    - @App\/Controller\/UserController:show\n    - @App\/Controller\/UserController:index<\/code><\/pre>\n<h3>&#20351;&#29992;&#36335;&#30001;&#21305;&#37197;<\/h3>\n<p>&#35201;&#20351;&#29992;&#36335;&#30001;&#21305;&#37197;&#65292;&#35831;&#25353;&#29031;&#20197;&#19979;&#27493;&#39588;&#25805;&#20316;&#65306;<\/p>\n<ol>\n<li>\n<p>&#22312;&#25511;&#21046;&#22120;&#20013;&#35843;&#29992;&#36335;&#30001;&#21305;&#37197;&#30340;&#26041;&#27861;&#65306;<\/p>\n<pre><code class=\"language-php\">$response = $this-&gt;routeMatch-&gt;match(['GET', 'POST'])-&gt;getTarget();<\/code><\/pre>\n<\/li>\n<li>\n<p>&#26681;&#25454;&#21709;&#24212;&#31867;&#22411;&#36873;&#25321;&#30456;&#24212;&#30340;&#22788;&#29702;&#20989;&#25968;&#65306;<\/p>\n<pre><code class=\"language-php\">if ($response instanceof Response) {\n   echo $response-&gt;getContent(); \/\/ &#22914;&#26524;&#26159; HTTP &#21709;&#24212;\n} else {\n   echo \"&#26410;&#30693;&#35831;&#27714;\";\n}<\/code><\/pre>\n<\/li>\n<li>\n<p>&#31034;&#20363;&#20195;&#30721;&#65306;<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\/\/ UserController.php\nnamespace AppController;\n\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentRoutingAnnotationRoute;\n\nclass UserController extends AbstractController\n{\n    \/**\n     * &#29992;&#25143;&#21015;&#34920;&#39029;&#38754;&#12290;\n     *\n     * @Route(\"\/users\", name=\"app_users_index\")\n     *\/\n    public function index(Request $request): Response\n    {\n        return new Response('Hello, World!');\n    }\n\n    \/**\n     * &#29992;&#25143;&#35814;&#24773;&#39029;&#12290;\n     *\n     * @Route(\"\/{id}\", name=\"app_users_show\")\n     *\/\n    public function show(int $id): Response\n    {\n        \/\/ &#27169;&#25311;&#29992;&#25143;&#25968;&#25454;\n        $user = [\n            'name' =&gt; 'John Doe',\n            'age' =&gt; 30,\n        ];\n\n        return new Response(json_encode($user));\n    }\n}\n\n\/\/ Route.php\nnamespace AppRouter;\n\nuse SymfonyComponentRoutingAnnotationRoute;\nuse SymfonyComponentRoutingExceptionResourceNotFoundException;\n\n#[Route('\/')]\nclass Routes\n{\n    #[Route(\"\/users\/{id}\")]\n    public function indexAction(): Response\n    {\n        throw new ResourceNotFoundException(\"User not found\");\n    }\n\n    #[Route(\"\/users\")]\n    public function indexAction2(): Response\n    {\n        return new Response('Hello, World!');\n    }\n\n    #[Route(\"\/users\/{id}\/show\")]\n    public function showAction(int $id): Response\n    {\n        try {\n            return new Response(\"User ID: {$id}\");\n        } catch (ResourceNotFoundException $e) {\n            return new Response($e-&gt;getMessage());\n        }\n    }\n}\n<\/code><\/pre>\n<p>&#36890;&#36807;&#36825;&#31181;&#26041;&#24335;&#65292;&#24744;&#21487;&#20197;&#22312; Symfony &#20013;&#21033;&#29992;&#36335;&#30001;&#21305;&#37197;&#26469;&#28789;&#27963;&#22320;&#32452;&#32455;&#21644;&#31649;&#29702;&#24212;&#29992;&#31243;&#24207;&#30340; API &#36164;&#28304;&#12290;&#36825;&#26377;&#21161;&#20110;&#25552;&#39640;&#24212;&#29992;&#31243;&#24207;&#30340;&#21487;&#25193;&#23637;&#24615;&#21644;&#28789;&#27963;&#24615;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#12298;Symfony &#36335;&#30001;&#21305;&#37197;&#34920;&#36798;&#24335;&#65306;&#23454;&#29992;&#25351;&#21335;&#12299; &#22312;&#038;#2..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1044","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\/1044","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=1044"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1044"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1044"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}