{"id":1144,"date":"2025-06-12T14:09:06","date_gmt":"2025-06-12T06:09:06","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1144.html"},"modified":"2025-06-12T14:09:06","modified_gmt":"2025-06-12T06:09:06","slug":"symfony%ef%bc%9a%e5%a6%82%e4%bd%95%e7%bc%96%e7%a8%8b%e5%bc%8f%e9%80%80%e5%87%ba%e7%94%a8%e6%88%b7%e7%99%bb%e5%bd%95","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1144.html","title":{"rendered":"Symfony\uff1a\u5982\u4f55\u7f16\u7a0b\u5f0f\u9000\u51fa\u7528\u6237\u767b\u5f55"},"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&#26694;&#26550;&#20013;&#65292;&#22914;&#26524;&#20320;&#24819;&#32534;&#31243;&#24335;&#22320;&#36864;&#20986;&#29992;&#25143;&#30340;&#30331;&#24405;&#29366;&#24577;&#65292;&#21487;&#20197;&#36890;&#36807;&#20197;&#19979;&#27493;&#39588;&#26469;&#23454;&#29616;&#65306;<\/p>\n<ol>\n<li>\n<p><strong>&#21019;&#24314;&#19968;&#20010;&#36335;&#30001;<\/strong>&#65306;\n&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23450;&#20041;&#19968;&#20010;&#36335;&#30001;&#65292;&#29992;&#20110;&#22788;&#29702;&#29992;&#25143;&#27880;&#38144;&#35831;&#27714;&#12290;<\/p>\n<pre><code class=\"language-yaml\"># config\/routes.yaml\nlogout:\n   path: \/logout\n   methods: [GET]\n   controller: AppControllerUserController::logoutAction<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#21019;&#24314;&#25511;&#21046;&#22120;&#26041;&#27861;<\/strong>&#65306;\n&#22312;<code>UserController<\/code>&#20013;&#65292;&#21019;&#24314;&#19968;&#20010;&#26041;&#27861;&#26469;&#22788;&#29702;&#30331;&#20986;&#35831;&#27714;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/UserController.php\nnamespace AppController;\n\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\n\nclass UserController extends AbstractController\n{\n   \/**\n    * @Route(\"\/logout\", name=\"app_logout\")\n    *\/\n   public function logoutAction(): Response\n   {\n       \/\/ &#36864;&#20986;&#24403;&#21069;&#20250;&#35805;\n       $this-&gt;get('security.token_storage')-&gt;setToken(null);\n\n       \/\/ &#37325;&#23450;&#21521;&#21040;&#30331;&#24405;&#39029;&#38754;\n       return $this-&gt;redirectToRoute('app_login');\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#26356;&#26032;&#27169;&#26495;<\/strong>&#65306;\n&#30830;&#20445;&#20320;&#30340;&#30331;&#24405;&#34920;&#21333;&#21644;&#27880;&#38144;&#38142;&#25509;&#25351;&#21521;&#27491;&#30830;&#30340;&#36335;&#30001;&#12290;<\/p>\n<pre><code class=\"language-html\">&lt;!-- templates\/login.html.twig --&gt;\n&lt;form action=\"{{ path('app_logout') }}\" method=\"post\"&gt;\n   &lt;button type=\"submit\"&gt;Logout&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#30830;&#20445;&#23433;&#20840;&#37197;&#32622;<\/strong>&#65306;\n&#30830;&#20445;&#20320;&#30340;&#24212;&#29992;&#21551;&#29992;&#20102;CSRF&#20445;&#25252;&#65292;&#24182;&#19988;&#22312;&#29983;&#20135;&#29615;&#22659;&#20013;&#31105;&#29992;&#23427;&#20197;&#25552;&#39640;&#23433;&#20840;&#24615;&#12290;<\/p>\n<pre><code class=\"language-yaml\"># .env\nAPP_SECRET=your_secret_key\nSECURE_RANDOM_KEY=your_secure_random_key\nSESSION_COOKIE_SECURE=true\nSESSION_COOKIE_HTTP_ONLY=true\n\n# .env.local\nSESSION_COOKIE_SECURE=false\nSESSION_COOKIE_HTTP_ONLY=false<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#23601;&#21487;&#20197;&#22312;Symfony&#24212;&#29992;&#20013;&#23454;&#29616;&#32534;&#31243;&#24335;&#22320;&#36864;&#20986;&#29992;&#25143;&#30340;&#30331;&#24405;&#29366;&#24577;&#20102;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#22788;&#29702;&#29992;&#25143;&#20250;&#35805;&#21644;&#36523;&#20221;&#39564;&#35777;&#22312;&#35768;&#22810;Web&#24212;&#29992;&#31243;&#24207;&#20013;&#26159;&#19968;&#39033;&#22522;&#26412;&#21151;&#33021;&#12290;Symfony&#65292;&#19968;&#20010;&#24378;&#22823;&#30340;PHP&#26694;&#26550;&#65292;&#33258;&#24102;&#20102;&#19968;&#20010;&#20840;&#38754;&#30340;&#23433;&#20840;&#32452;&#20214;&#65292;&#20351;&#24471;&#31649;&#29702;&#29992;&#25143;&#36523;&#20221;&#39564;&#35777;&#21644;&#20250;&#35805;&#30456;&#24403;&#31616;&#21333;&#12290;&#26377;&#26102;&#65292;&#24744;&#21487;&#33021;&#38656;&#35201;&#36890;&#36807;&#32534;&#31243;&#26041;&#24335;&#25163;&#21160;&#27880;&#38144;&#29992;&#25143;&#65292;&#32780;&#19981;&#26159;&#20165;&#20165;&#20381;&#36182;&#29992;&#25143;&#25163;&#21160;&#25805;&#20316;&#12290;&#36825;&#31181;&#33021;&#21147;&#22312;&#24456;&#22810;&#22330;&#26223;&#19979;&#37117;&#38750;&#24120;&#26377;&#29992;&#65292;&#21253;&#25324;&#23433;&#20840;&#36229;&#26102;&#12289;&#31649;&#29702;&#21592;&#25163;&#21160;&#35302;&#21457;&#25110;&#23436;&#25104;&#20851;&#38190;&#36807;&#31243;&#21518;&#30340;&#27880;&#38144;&#31561;&#12290;<\/p><p>&#26412;&#25945;&#31243;&#23558;&#25351;&#23548;&#24744;&#36890;&#36807;&#22810;&#31181;&#26041;&#24335;&#22312;Symfony&#20013;&#31243;&#24207;&#21270;&#22320;&#27880;&#38144;&#29992;&#25143;&#65292;&#35752;&#35770;&#19968;&#20123;&#24120;&#35265;&#30340;&#29992;&#20363;&#65292;&#24182;&#20171;&#32461;&#20195;&#30721;&#31034;&#20363;&#20197;&#21450;&#26368;&#20339;&#23454;&#36341;&#12290;<\/p><h3>&#29702;&#35299;Symfony&#30340;&#23433;&#20840;&#24615;<\/h3><p>Symfony&#30340;&#23433;&#20840;&#31995;&#32479;&#30001;&#35748;&#35777;&#21644;&#25480;&#26435;&#32452;&#25104;&#12290;&#23433;&#20840;&#31995;&#32479;&#22788;&#29702;&#35841;&#21487;&#20197;&#35775;&#38382;&#24212;&#29992;&#65288;&#35748;&#35777;&#65289;&#20197;&#21450;&#20182;&#20204;&#21487;&#20197;&#22312;&#20854;&#20013;&#20570;&#20160;&#20040;&#65288;&#25480;&#26435;&#65289;&#12290;&#22312;&#25105;&#20204;&#35752;&#35770;&#36890;&#36807;&#32534;&#31243;&#27880;&#38144;&#29992;&#25143;&#26102;&#65292;&#24517;&#39035;&#32771;&#34385;&#36825;&#20004;&#20010;&#26041;&#38754;&#30340;&#24433;&#21709;&#65292;&#22240;&#20026;&#25805;&#32437;&#20250;&#35805;&#25110;&#20196;&#29260;&#21487;&#33021;&#20250;&#23545;&#36825;&#20004;&#20010;&#26041;&#38754;&#20135;&#29983;&#24433;&#21709;&#12290;<\/p><h2>&#20250;&#35805;&#21644;&#20196;&#29260;&#22833;&#25928;<\/h2><p>&#20026;&#20102;&#27880;&#38144;&#29992;&#25143;&#65292;&#20320;&#38656;&#35201;&#25764;&#38144;&#20250;&#35805;&#21644;Symfony&#20026;&#27599;&#20010;&#29992;&#25143;&#20250;&#35805;&#20445;&#30041;&#30340;&#23433;&#20840;&#20196;&#29260;&#12290;&#35753;&#25105;&#20204;&#35752;&#35770;&#22914;&#20309;&#20570;&#21040;&#36825;&#19968;&#28857;&#12290;<\/p><h3>&#26080;&#25928;&#21270;&#20250;&#35805;<\/h3><p>&#26368;&#31616;&#21333;&#30340;&#26041;&#27861;&#26469;&#27880;&#38144;&#29992;&#25143;&#23601;&#26159;&#38144;&#27585;&#20250;&#35805;&#12290;&#36825;&#26159;&#22914;&#20309;&#20570;&#21040;&#30340;&#65306;<\/p><pre><code>use SymfonyComponentHttpFoundationRequest;\n\n\/\/ Your controller method\npublic function logOutUser(Request $request)\n{\n    \/\/ Fetches the current session and invalidates it according to Symfony's built-in methods\n    $session = $request-&gt;getSession();\n    $session-&gt;invalidate();\n\n    \/\/ Redirect to the login page or anywhere you prefer\n    return $this-&gt;redirectToRoute('app_login');\n}\n<\/code><\/pre><p>&#22312;&#39564;&#35777;&#20250;&#35805;&#21518;&#65292;&#20063;&#24314;&#35758;&#37325;&#23450;&#21521;&#21040;&#30331;&#24405;&#39029;&#38754;&#25110;&#30830;&#35748;&#39029;&#38754;&#65292;&#35813;&#39029;&#38754;&#24212;&#21521;&#29992;&#25143;&#21578;&#30693;&#20182;&#20204;&#24050;&#32463;&#30331;&#20986;&#12290;<\/p><h3>&#26080;&#25928;&#21270;&#23433;&#20840;&#20973;&#35777;<\/h3><p>&#22312;&#20250;&#35805;&#26399;&#38388;&#65292;Symfony &#20026;&#24050;&#35748;&#35777;&#30340;&#29992;&#25143;&#31649;&#29702;&#19968;&#20010;&#23433;&#20840;&#20196;&#29260;&#12290;&#36890;&#36807;&#26080;&#25928;&#21270;&#36825;&#20010;&#20196;&#29260;&#65292;&#21487;&#20197;&#30830;&#20445;&#29992;&#25143;&#23436;&#20840;&#30331;&#20986;&#12290;&#20197;&#19979;&#26159;&#20351;&#29992; Symfony &#30340;&#23433;&#20840;&#20196;&#29260;&#36827;&#34892;&#25805;&#20316;&#30340;&#26041;&#27861;&#65306;<\/p><pre><code>use SymfonyComponentSecurityCoreExceptionLogoutException;\nuse SymfonyComponentSecurityCoreAuthenticationTokenStorageTokenStorageInterface;\nuse SymfonyComponentHttpFoundationRequestStack;\n\n\/\/ Your service or controller\npublic function logOutToken(\n    TokenStorageInterface $tokenStorage,\n    RequestStack $requestStack\n) {\n    try {\n        \/\/ Set the token to null to invalidate it\n        $tokenStorage-&gt;setToken(null);\n\n        \/\/ Get the session from the request stack and invalidate it.\n        $requestStack-&gt;getSession()-&gt;invalidate();\n    } catch (LogoutException $exception) {\n        \/\/ You can handle it differently, for instance, log the exception message\n        throw new LogoutException('Unable to log out the user.');\n    }\n\n    \/\/ Redirect here as well\n    return $this-&gt;redirectToRoute('app_login');\n}\n<\/code><\/pre><p>&#26080;&#25928;&#21270;&#20250;&#35805;&#21644;&#23433;&#20840;&#20196;&#29260;&#36890;&#24120;&#36275;&#20197;&#23436;&#20840;&#27880;&#38144;&#29992;&#25143;&#12290;&#30830;&#20445;&#22312;&#25805;&#20316;&#20043;&#21518;&#65292;Symfony&#30340;&#38450;&#28779;&#22681;&#35774;&#32622;&#24050;&#37197;&#32622;&#20197;&#23436;&#20840;&#29702;&#35299;&#35813;&#29992;&#25143;&#24050;&#34987;&#27880;&#38144;&#12290;<\/p><h2>&#39640;&#32423;&#22330;&#26223;&#65306;&#40664;&#35748;&#20196;&#29260;<\/h2><p>&#22312;API&#19978;&#19979;&#25991;&#20013;&#19982;&#24744;&#20114;&#21160;&#26102;&#65292;&#24744;&#21487;&#33021;&#19981;&#20250;&#22788;&#29702;&#20256;&#32479;&#30340;&#20250;&#35805;&#65292;&#32780;&#26159;&#22788;&#29702;&#20196;&#29260;&#40664;&#35748;&#20540;&#12290;&#36825;&#20123;&#20196;&#29260;&#20195;&#34920;&#24050;&#35748;&#35777;&#30340;&#29992;&#25143;&#65292;&#24182;&#38656;&#35201;&#20197;&#19981;&#21516;&#30340;&#26041;&#24335;&#36827;&#34892;&#27880;&#38144;&#12290;&#36890;&#24120;&#24773;&#20917;&#19979;&#65292;&#24744;&#23558;&#20351;&#29992;&#22914;LexikJWTAuthenticationBundle&#36825;&#26679;&#30340;&#21253;&#65292;&#35813;&#21253;&#33258;&#24102;&#29992;&#20110;&#22788;&#29702;&#36825;&#20123;&#20196;&#29260;&#30340;&#24037;&#20855;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#20351;&#29992;&#27492;&#21253;&#30340;&#27010;&#24565;&#24615;&#31034;&#20363;&#65306;<\/p><pre><code>use LexikBundleJWTAuthenticationBundleServicesJWTTokenManagerInterface;\n\n\/\/ The function receives the JWT manager via dependency injection\npublic function apiLogOutUser(JWTTokenManagerInterface $jwtManager)\n{\n    \/\/ Invalidate the token someway, depending on your storage solution\n    $jwtManager-&gt;invalidate($token);\n\n    \/\/ Do redirect if applicable or return a suitable API response\n    \/\/ (needs proper API response handling, e.g., returning a JSON\n    \/\/ object with a message stating the user has been logged out).\n}\n<\/code><\/pre><h2>&#22312;&#29992;&#25143;&#30331;&#24405;&#26102;&#33258;&#21160;&#27880;&#38144;&#12290;<\/h2><p>&#38656;&#35201;&#25351;&#20986;&#30340;&#26159;&#65292;&#27880;&#38144;&#29992;&#25143;&#24182;&#19981;&#24635;&#26159;&#38656;&#35201;&#29992;&#25143;&#22312;&#24212;&#29992;&#20869;&#25163;&#21160;&#25805;&#20316;&#25165;&#33021;&#35302;&#21457;&#30340;&#12290;&#20320;&#21487;&#20197;&#26681;&#25454;&#26576;&#20123;&#20107;&#20214;&#26469;&#35302;&#21457;&#27880;&#38144;&#25805;&#20316;&#12290;<\/p><p>&#20363;&#22914;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;Symfony&#30340;&#20107;&#20214;&#20998;&#21457;&#22120;&#26469;&#30417;&#21548;&#29305;&#23450;&#20107;&#20214;&#24182;&#24403;&#27492;&#31867;&#20107;&#20214;&#21457;&#29983;&#26102;&#27880;&#38144;&#29992;&#25143;&#12290;&#36825;&#22312;&#31649;&#29702;&#21592;&#21024;&#38500;&#36134;&#25143;&#30340;&#24773;&#20917;&#19979;&#21487;&#33021;&#20250;&#38750;&#24120;&#26377;&#29992;&#65292;&#24744;&#24076;&#26395;&#31435;&#21363;&#32456;&#27490;&#19982;&#35813;&#24080;&#25143;&#20851;&#32852;&#30340;&#25152;&#26377;&#27963;&#21160;&#20250;&#35805;&#12290;<\/p><h3>&#20351;&#29992;&#20107;&#20214;&#20998;&#21457;&#22120;<\/h3><p>&#20197;&#19979;&#26159;&#22914;&#20309;&#35774;&#32622;&#19968;&#20010;&#20107;&#20214;&#30417;&#21548;&#22120;&#20197;&#21551;&#21160;&#30331;&#20986;&#30340;&#31616;&#21270;&#31034;&#20363;&#65306;<\/p><pre><code>use SymfonyComponentEventDispatcherEventSubscriberInterface;\n\nclass UserLogoutSubscriber implements EventSubscriberInterface\n{\n    public static function getSubscribedEvents()\n    {\n        return [\n            SomeEvent::NAME =&gt; 'onSomeEvent',\n        ];\n    }\n\n    public function onSomeEvent(SomeEvent $event)\n    {\n        \/\/ Assuming your event provides the user object\n        \/\/ Programmatically log the user out here...\n        \/\/ Invalidate the session and token as described earlier.\n    }\n}\n<\/code><\/pre><h2>&#32467;&#35770;&#12290;<\/h2><p>Symfony &#25552;&#20379;&#20102;&#22788;&#29702;&#23433;&#20840;&#30340;&#24378;&#22823;&#24037;&#20855;&#38598;&#65292;&#29702;&#35299;&#22914;&#20309;&#31243;&#24207;&#21270;&#22320;&#27880;&#38144;&#29992;&#25143;&#38656;&#35201;&#20102;&#35299;&#20854;&#20013;&#30340;&#32452;&#20214;&mdash;&mdash;&#20250;&#35805;&#12289;&#20196;&#29260;&#12289;&#20107;&#20214;&#22788;&#29702;&#31561;&#12290;&#22312;&#26412;&#25945;&#31243;&#30340;&#24110;&#21161;&#19979;&#65292;&#24744;&#29616;&#22312;&#20855;&#22791;&#20102;&#31649;&#29702;&#29992;&#25143;&#20250;&#35805;&#21644;&#27880;&#38144;&#30340;&#21151;&#33021;&#65292;&#36825;&#23558;&#36171;&#20104;&#24744;&#23545;&#24212;&#29992;&#31243;&#24207;&#23433;&#20840;&#24615;&#21644;&#29992;&#25143;&#20307;&#39564;&#26356;&#22823;&#30340;&#25511;&#21046;&#26435;&#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; Symfony &#20013;&#65292;&#32534;&#31243;&#24335;&#22320;&#36864;&#20986;&#29992;&#25143;&#30331;&#24405;&#21487;&#20197;&#36890;&#36807;&#20351;&#29992; <code>logout<\/code> &#26041;&#27861;&#26469;&#23454;&#29616;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#22312;&#25511;&#21046;&#22120;&#26041;&#27861;&#20013;&#35843;&#29992;&#27492;&#26041;&#27861;&#30340;&#31034;&#20363;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppController;\n\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\n\nclass UserController extends AbstractController\n{\n    \/**\n     * @Route(\"\/logout\", name=\"logout\")\n     *\/\n    public function logoutAction()\n    {\n        $this-&gt;getUser()-&gt;setLogoutTime(new DateTime());\n        $this-&gt;getUser()-&gt;save();\n\n        return new Response('Logged out successfully.');\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#21019;&#24314;&#20102;&#19968;&#20010;&#21517;&#20026; <code>logoutAction<\/code> &#30340;&#25511;&#21046;&#22120;&#26041;&#27861;&#12290;&#36825;&#20010;&#26041;&#27861;&#25509;&#21463;&#19968;&#20010;&#21442;&#25968; <code>$this-&gt;getUser()<\/code>&#65292;&#35813;&#26041;&#27861;&#36820;&#22238;&#24403;&#21069;&#29992;&#25143;&#30340;&#23454;&#20363;&#12290;&#28982;&#21518;&#65292;&#25105;&#20204;&#23558;&#29992;&#25143;&#30340; <code>logoutTime<\/code> &#35774;&#32622;&#20026;&#24403;&#21069;&#26102;&#38388;&#65292;&#24182;&#23558;&#20854;&#20445;&#23384;&#21040;&#25968;&#25454;&#24211;&#12290;<\/p>\n<p>&#27880;&#24847;&#65292;&#20026;&#20102;&#20351;&#19978;&#36848;&#25805;&#20316;&#29983;&#25928;&#65292;&#20320;&#38656;&#35201;&#30830;&#20445;&#20320;&#30340;&#24212;&#29992;&#31243;&#24207;&#24050;&#32463;&#37197;&#32622;&#20102;&#27491;&#30830;&#30340;&#25968;&#25454;&#24211;&#39537;&#21160;&#21644;&#36830;&#25509;&#20449;&#24687;&#65292;&#24182;&#19988;&#20320;&#26377;&#26435;&#38480;&#35775;&#38382;&#25968;&#25454;&#24211;&#12290;<\/p>\n<p>&#22914;&#26524;&#20320;&#38656;&#35201;&#24110;&#21161;&#32534;&#20889;&#20854;&#20182;&#31867;&#22411;&#30340;&#36864;&#20986;&#36923;&#36753;&#65288;&#20363;&#22914;&#65292;&#36890;&#36807; HTTP &#35831;&#27714;&#20013;&#30340; POST &#25110; GET &#26041;&#24335;&#65289;&#65292;&#35831;&#21578;&#35785;&#25105;&#26356;&#22810;&#32454;&#33410;&#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&#26694;&#26550;&#20013;&#65292;&#22914;&#26524;&#20320;&#24819;&#32534;&#31243;&#24335;&#22320;&#36864;&#20986;&#038;#299..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1144","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\/1144","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=1144"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1144"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1144"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}