{"id":1055,"date":"2025-06-12T11:35:23","date_gmt":"2025-06-12T03:35:23","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1055.html"},"modified":"2025-06-12T11:35:23","modified_gmt":"2025-06-12T03:35:23","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8symfony%e4%b8%ad%e8%8e%b7%e5%8f%96%e7%94%a8%e6%88%b7%e4%bb%a3%e7%90%86","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1055.html","title":{"rendered":"\u5982\u4f55\u5728Symfony\u4e2d\u83b7\u53d6\u7528\u6237\u4ee3\u7406"},"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;&#33719;&#21462;&#29992;&#25143;&#20195;&#29702;&#21487;&#20197;&#36890;&#36807; <code>Request<\/code> &#23545;&#35937;&#26469;&#23454;&#29616;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;&#25511;&#21046;&#22120;&#20013;&#33719;&#21462;&#29992;&#25143;&#20195;&#29702;&#65306;<\/p>\n<pre><code class=\"language-php\">use SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\n\nclass UserController extends AbstractController\n{\n    public function getUserAgent(Request $request)\n    {\n        \/\/ &#33719;&#21462;&#29992;&#25143;&#20195;&#29702;&#23383;&#31526;&#20018;\n        $userAgent = $request-&gt;headers-&gt;get('User-Agent');\n\n        \/\/ &#36755;&#20986;&#29992;&#25143;&#20195;&#29702;&#23383;&#31526;&#20018;\n        return $this-&gt;render('user_agent.html.twig', [\n            'userAgent' =&gt; $userAgent,\n        ]);\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#31034;&#20363;&#20013;&#65292;&#25105;&#20204;&#20351;&#29992;&#20102; Symfony &#30340; <code>Request<\/code> &#23545;&#35937;&#26469;&#33719;&#21462;&#29992;&#25143;&#20195;&#29702;&#23383;&#31526;&#20018;&#12290;<code>$request-&gt;headers-&gt;get('User-Agent')<\/code> &#20250;&#36820;&#22238;&#35831;&#27714;&#22836;&#20013;&#30340; <code>User-Agent<\/code> &#23383;&#27573;&#12290;<\/p>\n<p>&#25509;&#19979;&#26469;&#65292;&#25105;&#20204;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010; Twig &#27169;&#26495;&#26469;&#26174;&#31034;&#29992;&#25143;&#20195;&#29702;&#23383;&#31526;&#20018;&#65306;<\/p>\n<pre><code class=\"language-twig\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;title&gt;User Agent&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;User Agent&lt;\/h1&gt;\n    &lt;p&gt;Your User Agent is: {{ userAgent }}&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>&#36825;&#26679;&#65292;&#24403;&#20320;&#35775;&#38382; <code>\/user-agent<\/code> &#36335;&#30001;&#26102;&#65292;Symfony &#23558;&#20250;&#28210;&#26579;&#19968;&#20010;&#39029;&#38754;&#65292;&#26174;&#31034;&#24403;&#21069;&#29992;&#25143;&#30340;&#29992;&#25143;&#20195;&#29702;&#23383;&#31526;&#20018;&#12290;<\/p>\n<p>&#22914;&#26524;&#20320;&#38656;&#35201;&#36827;&#19968;&#27493;&#22788;&#29702;&#29992;&#25143;&#20195;&#29702;&#20449;&#24687;&#65292;&#27604;&#22914;&#26816;&#26597;&#29992;&#25143;&#20195;&#29702;&#26159;&#21542;&#26159;&#31227;&#21160;&#35774;&#22791;&#12289;&#27983;&#35272;&#22120;&#31867;&#22411;&#31561;&#65292;&#21487;&#20197;&#21442;&#32771; Symfony &#30340;&#23448;&#26041;&#25991;&#26723;&#25110;&#31532;&#19977;&#26041;&#24211;&#65288;&#22914; <code>SensioLabsBrowserDetector<\/code>&#65289;&#36827;&#34892;&#26356;&#22797;&#26434;&#30340;&#20998;&#26512;&#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>&#20351;&#29992;Symfony&#26694;&#26550;&#22788;&#29702;&#26469;&#33258;HTTP&#35831;&#27714;&#30340;&#20837;&#31449;&#35831;&#27714;&#25552;&#20379;&#20102;&#24378;&#22823;&#30340;&#24037;&#20855;&#38598;&#12290;&#22312;Web&#24320;&#21457;&#20013;&#65292;&#35775;&#38382;&#27983;&#35272;&#22120;&#25110;&#20854;&#20182;&#23458;&#25143;&#31471;&#21457;&#36865;&#30340;User Agent&#23383;&#31526;&#20018;&#26159;&#19968;&#39033;&#24120;&#35265;&#30340;&#38656;&#27714;&#12290;&#26412;&#25945;&#31243;&#23558;&#25351;&#23548;&#24744;&#22914;&#20309;&#22312;&#22522;&#20110;Symfony&#30340;&#24212;&#29992;&#31243;&#24207;&#20013;&#33719;&#21462;User Agent&#23383;&#31526;&#20018;&#12290;<\/p><h2>&#29702;&#35299;&#29992;&#25143;&#20195;&#29702;&#65288;User Agent&#65289;<\/h2><p>&#29992;&#25143;&#20195;&#29702;&#65288;User Agent&#65289;&#26159;&#27983;&#35272;&#22120;&#21644;&#20854;&#20182;HTTP&#23458;&#25143;&#31471;&#22312;&#27599;&#27425;&#35831;&#27714;&#20013;&#21457;&#36865;&#30340;&#25991;&#26412;&#22836;&#30340;&#19968;&#37096;&#20998;&#12290;&#23427;&#36890;&#24120;&#21253;&#21547;&#20851;&#20110;&#35774;&#22791;&#31867;&#22411;&#12289;&#25805;&#20316;&#31995;&#32479;&#29256;&#26412;&#12289;&#27983;&#35272;&#22120;&#29256;&#26412;&#31561;&#20449;&#24687;&#65292;&#20197;&#20415;&#20801;&#35768;Web&#26381;&#21153;&#22120;&#26681;&#25454;&#26368;&#36866;&#21512;&#23458;&#25143;&#31471;&#30340;&#20869;&#23481;&#26684;&#24335;&#36827;&#34892;&#20132;&#20184;&#12290;<\/p><h2>&#35774;&#32622;&#21644;&#21021;&#27493;&#32771;&#34385;<\/h2><p>&#22312;&#25105;&#20204;&#32487;&#32493;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#24050;&#32463;&#26377;&#19968;&#20010;&#36816;&#34892;&#20013;&#30340;Symfony&#24212;&#29992;&#12290;&#22914;&#26524;&#24744;&#27491;&#22312;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;Symfony&#24212;&#29992;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;Symfony CLI&#25110;&#36890;&#36807;Composer&#26469;&#35774;&#32622;&#23427;&#65306;<\/p><pre><code>symfony new my_project\n\/\/ or\ncomposer create-project symfony\/skeleton my_project\n<\/code><\/pre><h2>&#36890;&#36807;&#35831;&#27714;&#23545;&#35937;&#35775;&#38382;&#29992;&#25143;&#20195;&#29702;&#65288;User Agent&#65289;&#12290;<\/h2><p>Symfony &#30340;&#26680;&#24515;&#32452;&#20214;&#20043;&#19968;&#26159; HttpFoundation &#32452;&#20214;&#65292;&#23427;&#23553;&#35013;&#20102;&#25152;&#26377;&#30340; HTTP &#21327;&#35758;&#32454;&#33410;&#12290;<code>Request<\/code>&#23545;&#35937;&#23384;&#20648;&#25152;&#26377;&#26469;&#33258;HTTP&#35831;&#27714;&#30340;&#25968;&#25454;&#65292;&#21253;&#25324;&#22836;&#20449;&#24687;&#12290;User Agent&#23601;&#26159;&#19968;&#20010;&#36825;&#26679;&#30340;&#22836;&#20449;&#24687;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#20197;&#19979;&#26041;&#24335;&#35775;&#38382;&#23427;&#65306;<\/p><pre><code>\/\/ src\/Controller\/MyController.php\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationRequest;\n\nclass MyController extends AbstractController\n{\n    public function index(Request $request)\n    {\n        $userAgent = $request-&gt;headers-&gt;get('User-Agent');\n\n        \/\/ ...do something with the User Agent\n    }\n}\n<\/code><\/pre><p>&#22312;&#35813;&#31034;&#20363;&#20013;&#65292;&#29992;&#25143;&#20195;&#29702;&#20174;&#25511;&#21046;&#22120;&#21160;&#20316;&#20013;&#30340;&#35831;&#27714;&#22836;&#20013;&#25552;&#21462;&#12290;&#27492;&#26041;&#27861;&#31616;&#21333;&#19988;&#36866;&#29992;&#20110;&#22823;&#22810;&#25968;&#38656;&#27714;&#12290;<\/p><h2>&#20351;&#29992;&#26381;&#21153;&#26469;&#23553;&#35013;&#29992;&#25143;&#20195;&#29702;&#36923;&#36753;<\/h2><p>&#22914;&#26524;&#22312;&#24212;&#29992;&#31243;&#24207;&#30340;&#19981;&#21516;&#37096;&#20998;&#39057;&#32321;&#20351;&#29992;&#29992;&#25143;&#20195;&#29702;&#65292;&#21487;&#20197;&#32771;&#34385;&#23558;&#20854;&#36923;&#36753;&#23553;&#35013;&#22312;&#19968;&#20010;&#19987;&#38376;&#30340;&#26381;&#21153;&#20013;&#65306;<\/p><pre><code>\/\/ src\/Service\/UserAgentService.php\nnamespace AppService;\n\nuse SymfonyComponentHttpFoundationRequestStack;\n\nclass UserAgentService\n{\n    private $requestStack;\n\n    public function __construct(RequestStack $requestStack)\n    {\n        $this-&gt;requestStack = $requestStack;\n    }\n\n    public function getUserAgent(): ?string\n    {\n        $request = $this-&gt;requestStack-&gt;getCurrentRequest();\n        if (!$request) {\n            return null;\n        }\n\n        return $request-&gt;headers-&gt;get('User-Agent');\n    }\n}\n<\/code><\/pre><p>&#35813;&#26381;&#21153;&#29616;&#22312;&#21487;&#20197;&#33258;&#21160;&#27880;&#20837;&#21040;&#20219;&#20309;&#38656;&#35201;&#35775;&#38382;&#29992;&#25143;&#20195;&#29702;&#23383;&#31526;&#20018;&#30340;Symfony&#32452;&#20214;&#65288;&#22914;&#25511;&#21046;&#22120;&#12289;&#21629;&#20196;&#12289;&#20107;&#20214;&#35746;&#38405;&#22120;&#31561;&#65289;&#20013;&#12290;<\/p><h2>&#22522;&#20110;&#29992;&#25143;&#20195;&#29702;&#30340;&#26465;&#20214;&#21709;&#24212;<\/h2><p>&#22312;&#26576;&#20123;&#24773;&#20917;&#19979;&#65292;&#24744;&#21487;&#33021;&#38656;&#35201;&#26681;&#25454;&#23458;&#25143;&#31471;&#30340;User Agent&#25552;&#20379;&#19981;&#21516;&#30340;&#21709;&#24212;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#21019;&#24314;&#26465;&#20214;&#24615;&#21709;&#24212;&#30340;&#19968;&#20010;&#31034;&#20363;&#65306;<\/p><pre><code>\/\/ src\/Controller\/MyController.php\n\n\/\/ ...namespace and use statements\n\nclass MyController extends AbstractController\n{\n    \/\/ ...other methods\n\n    public function userAgentSpecificResponse(Request $request)\n    {\n        $userAgent = $request-&gt;headers-&gt;get('User-Agent');\n\n        if (strpos($userAgent, 'iPhone') !== false) {\n            \/\/ Handle the response for iPhones\n        } else if (strpos($userAgent, 'Android') !== false) {\n            \/\/ Handle the response for Android devices\n        } else {\n            \/\/ Handle the response for other devices\n        }\n\n        \/\/ ...return a response\n    }\n}\n<\/code><\/pre><p>&#36825;&#26159;&#31616;&#21333;&#30340;&#20363;&#23376;&#65292;&#32780;&#29616;&#23454;&#19990;&#30028;&#20013;&#30340;&#29992;&#20363;&#21487;&#33021;&#38656;&#35201;&#26356;&#22797;&#26434;&#30340;&#29992;&#25143;&#20195;&#29702;&#35299;&#26512;&#12290;<\/p><h2>&#26368;&#20339;&#23454;&#36341;&#21644;&#29992;&#25143;&#20195;&#29702;&#24211;<\/h2><p>&#22312;Symfony&#20013;&#33719;&#21462;&#29992;&#25143;&#20195;&#29702;&#20449;&#24687;&#30456;&#23545;&#31616;&#21333;&#65292;&#20294;&#27491;&#30830;&#35299;&#26512;&#20197;&#30830;&#23450;&#35774;&#22791;&#31867;&#22411;&#12289;&#27983;&#35272;&#22120;&#25110;&#25805;&#20316;&#31995;&#32479;&#31561;&#32454;&#33410;&#21017;&#21487;&#33021;&#30456;&#24403;&#22797;&#26434;&#12290;&#36825;&#26102;&#23601;&#38656;&#35201;&#31532;&#19977;&#26041;&#24211;&#22914;Mobile-Detect&#26469;&#21457;&#25381;&#20316;&#29992;&#20102;&#65306;<\/p><pre><code>\/\/ Install the library using Composer\ncomposer require mobiledetect\/mobiledetectlib\n<\/code><\/pre><p>&#31227;&#21160;&#26816;&#27979;&#21487;&#20197;&#38598;&#25104;&#21040;&#24744;&#30340;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#65292;&#20197;&#25552;&#20379;&#39640;&#32423;&#29992;&#25143;&#20195;&#29702;&#35299;&#26512;&#65306;<\/p><pre><code>\/\/ src\/Controller\/MyController.php\n\n\/\/ ...use statements\nuse DetectionMobileDetect;\n\n\/\/ ...class and other methods\n\npublic function advancedUserAgentDetection(Request $request)\n{\n    $detect = new MobileDetect();\n    $detect-&gt;setUserAgent($request-&gt;headers-&gt;get('User-Agent'));\n\n    if ($detect-&gt;isMobile()) {\n        \/\/ Handle mobile devices\n    } else if ($detect-&gt;isTablet()) {\n        \/\/ Handle tablets\n    } else {\n        \/\/ Handle desktops\n    }\n\n    \/\/ ...return a response\n}\n<\/code><\/pre><p>&#36825;&#26377;&#21161;&#20110;&#24744;&#22312;&#24212;&#29992;&#31243;&#24207;&#20013;&#26377;&#25928;&#22320;&#22788;&#29702;&#29992;&#25143;&#20195;&#29702;&#23383;&#31526;&#20018;&#65292;&#20294;&#35831;&#35760;&#20303;&#65292;&#22312;&#22788;&#29702;&#21644;&#23384;&#20648;&#29992;&#25143;&#20195;&#29702;&#23383;&#31526;&#20018;&#26102;&#20063;&#35201;&#32771;&#34385;&#38544;&#31169;&#26041;&#38754;&#30340;&#22240;&#32032;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;&#36825;&#38376;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#24050;&#32463;&#20171;&#32461;&#20102;&#22914;&#20309;&#22312;Symfony&#24212;&#29992;&#20013;&#20174;HTTP&#35831;&#27714;&#20013;&#33719;&#21462;&#29992;&#25143;&#20195;&#29702;&#20449;&#24687;&#65292;&#24182;&#25552;&#20379;&#20102;&#38024;&#23545;&#19981;&#21516;&#22330;&#26223;&#30340;&#20195;&#30721;&#31034;&#20363;&#65292;&#20197;&#21450;&#35752;&#35770;&#20102;&#20351;&#29992;&#31532;&#19977;&#26041;&#24211;&#36827;&#34892;&#39640;&#32423;&#35299;&#26512;&#30340;&#24212;&#29992;&#22330;&#26223;&#12290;&#36981;&#24490;&#33391;&#22909;&#30340;&#29992;&#25143;&#20195;&#29702;&#26816;&#27979;&#21644;&#22788;&#29702;&#23454;&#36341;&#65292;&#21487;&#20197;&#26174;&#33879;&#25552;&#21319;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#29992;&#25143;&#20307;&#39564;&#65292;&#24182;&#23454;&#29616;&#26356;&#20339;&#30340;&#35774;&#22791;&#29305;&#23450;&#20248;&#21270;&#12290;<\/p><p>&#38543;&#30528;Web&#25216;&#26415;&#21450;&#26631;&#20934;&#30340;&#19981;&#26029;&#21457;&#23637;&#65292;&#30830;&#20445;&#36319;&#19978;Symfony&#30340;&#26368;&#20339;&#23454;&#36341;&#20197;&#20445;&#25345;&#22788;&#29702;User Agent&#30340;&#26041;&#27861;&#26377;&#25928;&#21644;&#23433;&#20840;&#26159;&#38750;&#24120;&#37325;&#35201;&#30340;&#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>&#35201;&#22312; Symfony &#20013;&#33719;&#21462;&#29992;&#25143;&#20195;&#29702;&#65288;User Agent&#65289;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; <code>Request<\/code> &#31867;&#30340; <code>headers()<\/code> &#26041;&#27861;&#26469;&#35775;&#38382;&#23458;&#25143;&#31471;&#30340; HTTP &#22836;&#20449;&#24687;&#12290;&#36825;&#23558;&#36820;&#22238;&#19968;&#20010;&#25968;&#32452;&#65292;&#20854;&#20013;&#21253;&#21547;&#35831;&#27714;&#20013;&#30340;&#25152;&#26377;&#22836;&#12290;<\/p>\n<p>&#20197;&#19979;&#26159;&#22914;&#20309;&#22312; Symfony &#20013;&#33719;&#21462;&#29992;&#25143;&#20195;&#29702;&#30340;&#26041;&#27861;&#65306;<\/p>\n<pre><code class=\"language-php\">$ua = Request::createFromGlobals()-&gt;headers-&gt;get('User-Agent');<\/code><\/pre>\n<p>&#36825;&#27573;&#20195;&#30721;&#20250;&#20174; <code>$_SERVER<\/code> &#21464;&#37327;&#20013;&#25552;&#21462; User-Agent &#30340;&#20540;&#65292;&#24182;&#23558;&#20854;&#36716;&#25442;&#20026; PHP &#23383;&#31526;&#20018;&#12290;&#27880;&#24847;&#65306;<code>$_SERVER<\/code> &#21464;&#37327;&#20165;&#22312;&#26381;&#21153;&#22120;&#31471;&#21487;&#29992;&#65292;&#22240;&#27492;&#22312;&#27983;&#35272;&#22120;&#19978;&#36816;&#34892;&#26102;&#19981;&#20250;&#23384;&#22312;&#12290;<\/p>\n<p>&#19979;&#38754;&#26159;&#19968;&#20123;&#31034;&#20363;&#20195;&#30721;&#29255;&#27573;&#65292;&#23637;&#31034;&#22914;&#20309;&#22312;&#19981;&#21516;&#30340;&#29615;&#22659;&#20013;&#33719;&#21462;&#21644;&#20351;&#29992;&#29992;&#25143;&#20195;&#29702;&#65306;<\/p>\n<ol>\n<li>&#22312;&#26412;&#22320;&#24320;&#21457;&#29615;&#22659;&#20013;&#30340; PHP &#26381;&#21153;&#22120;&#19978;&#65306;\n<pre><code class=\"language-php\">\n&lt;?php<\/code><\/pre><\/li>\n<\/ol>\n<p>\/\/ &#20551;&#35774;&#25105;&#20204;&#27491;&#22312;&#20351;&#29992; symfony &#26500;&#24314;&#24212;&#29992;\n$ua = Request::createFromGlobals()-&gt;headers-&gt;get(&#8216;User-Agent&#8217;);<\/p>\n<p>echo &#8220;User Agent: $ua&#8221;;\n?&gt;<\/p>\n<pre><code>\n2. &#20351;&#29992; Docker &#38236;&#20687;&#26500;&#24314;&#30340;&#24212;&#29992;&#31243;&#24207;&#65306;\n```dockerfile\nFROM php:7.4-fpm\n\nWORKDIR \/var\/www\/html\n\nRUN apt-get update &amp;&amp; \n    apt-get install -y curl\n\nCOPY . \/var\/www\/html\n\nEXPOSE 80\n\nCMD [\"php\", \"-S\", \"localhost:80\"]<\/code><\/pre>\n<ol start=\"3\">\n<li>&#22312; AWS EC2 &#19978;&#36816;&#34892;&#30340;&#24212;&#29992;&#31243;&#24207;&#65306;\n<pre><code class=\"language-bash\">\n#!\/bin\/bash<\/code><\/pre><\/li>\n<\/ol>\n<h1>&#33719;&#21462;&#24182;&#25171;&#21360; User-Agent<\/h1>\n<p>curl &#8211;request GET &#8216;<a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cDovLzE2OS4yNTQuMTY5LjI1NC9sYXRlc3QvbWV0YS1kYXRhL2lhbS9zZWN1cml0eS1jcmVkZW50aWFscy8=\" rel=\"noopener noreferrer nofollow\">http:\/\/169.254.169.254\/latest\/meta-data\/iam\/security-credentials\/<\/a>&#8216; | jq &#8216;.UserName&#8217;<\/p>\n<pre><code>\n\n&#36890;&#36807;&#20197;&#19978;&#36825;&#20123;&#26041;&#27861;&#65292;&#20320;&#21487;&#20197;&#36731;&#26494;&#22320;&#22312; Symfony &#24212;&#29992;&#31243;&#24207;&#20013;&#33719;&#21462;&#24182;&#22788;&#29702;&#29992;&#25143;&#20195;&#29702;&#20449;&#24687;&#12290;<\/code><\/pre>\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;&#33719;&#21462;&#29992;&#25143;&#20195;&#29702;&#21487;&#20197;&#36890;&#36807; Request &#23545;&#35937;&#038;#..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1055","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\/1055","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=1055"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1055"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1055"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}