{"id":1061,"date":"2025-06-12T11:42:52","date_gmt":"2025-06-12T03:42:52","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1061.html"},"modified":"2025-06-12T11:42:52","modified_gmt":"2025-06-12T03:42:52","slug":"%e5%9c%a8symfony%e4%b8%ad%e5%a4%84%e7%90%86404%e9%94%99%e8%af%af%ef%bc%9a%e6%95%99%e7%a8%8b%e4%b8%8e%e7%a4%ba%e4%be%8b","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1061.html","title":{"rendered":"\u5728Symfony\u4e2d\u5904\u7406404\u9519\u8bef\uff1a\u6559\u7a0b\u4e0e\u793a\u4f8b"},"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;&#22788;&#29702;404&#38169;&#35823;&#36890;&#24120;&#28041;&#21450;&#20197;&#19979;&#20960;&#20010;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>\n<p><strong>&#21019;&#24314;&#25511;&#21046;&#22120;<\/strong>&#65306;\n&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;404&#38169;&#35823;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#23558;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026;<code>ErrorController.php<\/code>&#30340;&#25991;&#20214;&#65292;&#24182;&#28155;&#21152;&#20197;&#19979;&#20869;&#23481;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/AppBundle\/Controller\/ErrorController.php\n\nnamespace AppBundleController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentHttpKernelExceptionNotFoundHttpException;\n\nclass ErrorController extends AbstractController\n{\n   public function notFoundAction()\n   {\n       throw new NotFoundHttpException('The requested resource was not found.');\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#37197;&#32622;&#36335;&#30001;<\/strong>&#65306;\n&#30830;&#20445;&#20320;&#30340;&#36335;&#30001;&#37197;&#32622;&#20013;&#21253;&#21547;&#20102;&#23545;404&#38169;&#35823;&#39029;&#38754;&#30340;&#26144;&#23556;&#12290;&#20363;&#22914;&#65292;&#22312;<code>config\/routes.yaml<\/code>&#20013;&#28155;&#21152;&#20197;&#19979;&#20869;&#23481;&#65306;<\/p>\n<pre><code class=\"language-yaml\"># config\/routes.yaml\n\napp_not_found:\n   path: '\/404'\n   controller: AppBundleControllerErrorController::notFoundAction<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#35774;&#32622;&#21709;&#24212;&#22836;<\/strong>&#65288;&#21487;&#36873;&#65289;&#65306;\n&#22914;&#26524;&#20320;&#24076;&#26395;&#22312;404&#38169;&#35823;&#26102;&#36820;&#22238;&#29305;&#23450;&#30340;HTTP&#29366;&#24577;&#30721;&#21644;&#21709;&#24212;&#22836;&#65292;&#21487;&#20197;&#36825;&#26679;&#20570;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/AppBundle\/Controller\/ErrorController.php\n\nnamespace AppBundleController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentHttpKernelExceptionNotFoundHttpException;\n\nclass ErrorController extends AbstractController\n{\n   public function notFoundAction()\n   {\n       $response = new Response('Not Found', 404);\n       $response-&gt;headers-&gt;set('Content-Type', 'text\/html');\n       return $response;\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#27979;&#35797;404&#38169;&#35823;<\/strong>&#65306;\n&#26368;&#21518;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#35775;&#38382;<code>http:\/\/your-symfony-app.com\/404<\/code>&#26469;&#27979;&#35797;404&#38169;&#35823;&#26159;&#21542;&#27491;&#30830;&#22788;&#29702;&#12290;<\/p>\n<\/li>\n<\/ol>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312;Symfony&#24212;&#29992;&#31243;&#24207;&#20013;&#25104;&#21151;&#22788;&#29702;404&#38169;&#35823;&#12290;&#22914;&#26524;&#20320;&#26377;&#20219;&#20309;&#38382;&#39064;&#25110;&#38656;&#35201;&#36827;&#19968;&#27493;&#30340;&#24110;&#21161;&#65292;&#35831;&#38543;&#26102;&#25552;&#38382;&#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>&#27010;&#36848;<\/h2><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#35752;&#20351;&#29992;Symfony&#22788;&#29702;HTTP 404&#38169;&#35823;&#30340;&#26041;&#27861;&#65292;&#36825;&#26159;&#19968;&#20010;&#24191;&#27867;&#29992;&#20110;Web&#24212;&#29992;&#31243;&#24207;&#24320;&#21457;&#30340;&#24378;&#22823;&#30340;PHP&#26694;&#26550;&#12290;&#26377;&#25928;&#22320;&#31649;&#29702;404&#38169;&#35823;&#23545;&#20110;&#25552;&#39640;&#29992;&#25143;&#20307;&#39564;&#33267;&#20851;&#37325;&#35201;&#65292;&#24182;&#19988;&#22312;Web&#24320;&#21457;&#20013;&#26159;&#19968;&#31181;&#26368;&#20339;&#23454;&#36341;&#12290;<\/p><h3>&#39029;&#38754;&#26410;&#25214;&#21040;&#38169;&#35823;&#65288;404 Not Found&#65289;<\/h3><p>&#24403;&#29992;&#25143;&#23581;&#35797;&#35775;&#38382;&#19981;&#23384;&#22312;&#30340;&#32593;&#39029;&#26102;&#65292;&#20250;&#20986;&#29616;&ldquo;&#26410;&#25214;&#21040;&rdquo;&#38169;&#35823;&#65288;404 Not Found&#65289;&#12290;&#36825;&#21487;&#33021;&#26159;&#30001;&#20110;URL&#25340;&#20889;&#38169;&#35823;&#12289;&#21024;&#38500;&#30340;&#39029;&#38754;&#25110;&#38142;&#25509;&#25439;&#22351;&#25152;&#33268;&#12290;&#19968;&#20010;&#26377;&#25928;&#30340;404&#22788;&#29702;&#26426;&#21046;&#30830;&#20445;&#29992;&#25143;&#22312;&#21451;&#22909;&#26041;&#24335;&#19979;&#33719;&#30693;&#38169;&#35823;&#24182;&#25552;&#20379;&#36820;&#22238;&#24212;&#29992;&#27491;&#24120;&#37096;&#20998;&#30340;&#36873;&#25321;&#12290;<\/p><h2>&#35774;&#32622;&#19968;&#20010;Symfony&#39033;&#30446;<\/h2><p>&#22312;&#22788;&#29702;404&#38169;&#35823;&#20043;&#21069;&#65292;&#25105;&#20204;&#38656;&#35201;&#19968;&#20010;Symfony&#39033;&#30446;&#12290;&#22914;&#26524;&#20320;&#27809;&#26377;&#30340;&#35805;&#65292;&#21487;&#20197;&#20351;&#29992;Composer&#35774;&#32622;&#23427;&#65306;<\/p><pre><code>composer create-project symfony\/skeleton my_project_name<\/code><\/pre><p>&#19968;&#26086;&#39033;&#30446;&#35774;&#32622;&#22909;&#65292;&#23601;&#21487;&#20197;&#20351;&#29992;Symfony&#26381;&#21153;&#22120;&#36816;&#34892;&#23427;&#65306;<\/p><pre><code>cd my_project_name\nsymfony server:start\n<\/code><\/pre><h2>&#22788;&#29702;Symfony&#20013;&#30340;404&#38169;&#35823;<\/h2><h3>&#20351;&#29992;Symfony&#30340;&#24322;&#24120;&#25511;&#21046;&#22120;&#65288;Exception Controller&#65289;<\/h3><p>Symfony&#20013;&#26368;&#31616;&#21333;&#30340;&#26041;&#27861;&#26469;&#22788;&#29702;404&#38169;&#35823;&#26159;&#22312;&#20351;&#29992;TwigBundle&#20869;&#32622;&#30340;ExceptionController&#12290;&#24403;Symfony&#36935;&#21040;&#19968;&#20010;404&#38169;&#35823;&#26102;&#65292;&#23427;&#20250;&#25243;&#20986;&#19968;&#20010;&#24322;&#24120;&#65292;&#32780;ExceptionController&#21017;&#36127;&#36131;&#22788;&#29702;&#36825;&#20010;&#24322;&#24120;&#24182;&#26174;&#31034;&#36866;&#24403;&#30340;&#38169;&#35823;&#39029;&#38754;&#12290;<\/p><h3>&#33258;&#23450;&#20041;&#38169;&#35823;&#39029;&#38754;<\/h3><p>&#20026;&#20102;&#21019;&#24314;&#33258;&#23450;&#20041;&#38169;&#35823;&#39029;&#38754;&#65292;&#24744;&#38656;&#35201;&#22312;&#27169;&#26495;&#20013;&#21019;&#24314;&#36825;&#20123;&#39029;&#38754;&#12290;<code>templates\/bundles\/TwigBundle\/Exception\/<\/code>&#30446;&#24405;&#12290;&#23545;&#20110;404&#38169;&#35823;&#65292;&#20320;&#24212;&#35813;&#21629;&#21517;&#27169;&#26495;&#12290;<code>error404.html.twig<\/code>&#28982;&#21518;&#65292;&#26681;&#25454;&#24744;&#30340;&#24212;&#29992;&#38656;&#27714;&#33258;&#23450;&#20041;&#27492;&#27169;&#26495;&#12290;<\/p><h3>&#37197;&#32622;<\/h3><p>Symfony &#20801;&#35768;&#24744;&#26681;&#25454;&#29615;&#22659;&#37197;&#32622;&#38169;&#35823;&#39029;&#38754;&#27169;&#26495;&#12290;&#20363;&#22914;&#65292;&#22312;&#29983;&#20135;&#29615;&#22659;&#20013;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;&#20195;&#30721;&#26469;&#35774;&#32622;&#38169;&#35823;&#39029;&#38754;&#65306;\n\/\/ app\/config\/config.yml\nframework:\n error_controller: AppControllerErrorController::indexAction\n&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;AppControllerErrorController::indexAction &#26159;&#19968;&#20010;&#25511;&#21046;&#22120;&#26041;&#27861;&#65292;&#29992;&#20110;&#22788;&#29702;&#38169;&#35823;&#39029;&#38754;&#30340;&#26174;&#31034;&#12290;&#24744;&#21487;&#20197;&#26681;&#25454;&#38656;&#35201;&#33258;&#23450;&#20041;&#36825;&#20010;&#26041;&#27861;&#20197;&#23454;&#29616;&#19981;&#21516;&#30340;&#38169;&#35823;&#39029;&#38754;&#24067;&#23616;&#21644;&#26679;&#24335;&#12290;\n&#27492;&#22806;&#65292;Symfony &#36824;&#25552;&#20379;&#20102;&#20854;&#20182;&#26041;&#24335;&#26469;&#37197;&#32622;&#38169;&#35823;&#39029;&#38754;&#65292;&#21253;&#25324;&#20351;&#29992; error.html.twig &#27169;&#26495;&#25991;&#20214;&#12289;&#36890;&#36807;&#37197;&#32622;&#31867;&#25110;&#26381;&#21153;&#27880;&#20837;&#30340;&#26041;&#24335;&#26469;&#21160;&#24577;&#29983;&#25104;&#38169;&#35823;&#39029;&#38754;&#31561;&#12290;&#36825;&#20123;&#26041;&#27861;&#21487;&#20197;&#26681;&#25454;&#20855;&#20307;&#38656;&#27714;&#36827;&#34892;&#36873;&#25321;&#21644;&#23450;&#21046;&#12290;<code>config\/packages\/twig.yaml<\/code>&#20320;&#21487;&#20197;&#23450;&#20041;Symfony&#26597;&#25214;&#38169;&#35823;&#27169;&#26495;&#30340;&#36335;&#24452;&#65306;<\/p><pre><code>twig:\n    debug: '%kernel.debug%'\n    strict_variables: '%kernel.debug%'\n    exception_controller: 'AppControllerCustomExceptionController::showAction'\n<\/code><\/pre><p>&#22312;&#36825;&#31181;&#37197;&#32622;&#19979;&#65292;&#24744;&#21521;Symfony&#25351;&#31034;&#20351;&#29992;&#33258;&#23450;&#20041;&#25511;&#21046;&#22120;&#26469;&#28210;&#26579;&#38169;&#35823;&#39029;&#38754;&#12290;<\/p><h2>&#21019;&#24314;&#33258;&#23450;&#20041;&#24322;&#24120;&#25511;&#21046;&#22120;<\/h2><p>&#22914;&#26524;&#40664;&#35748;&#30340;&#24322;&#24120;&#25511;&#21046;&#22120;&#19981;&#31526;&#21512;&#24744;&#30340;&#38656;&#27714;&#65292;&#24744;&#21487;&#20197;&#23454;&#29616;&#33258;&#23450;&#20041;&#24322;&#24120;&#25511;&#21046;&#22120;&#12290;&#20197;&#19979;&#26159;&#21019;&#24314;&#33258;&#23450;&#20041;&#24322;&#24120;&#25511;&#21046;&#22120;&#30340;&#25351;&#21335;&#65306;<\/p><h3>&#27493;&#39588;1&#65306;&#21019;&#24314;&#25511;&#21046;&#22120;<\/h3><p>&#39318;&#20808;&#65292;&#22312;&#33258;&#23450;&#20041;&#24322;&#24120;&#25511;&#21046;&#22120;&#31867;&#20013;&#21019;&#24314;&#24744;&#30340;&#33258;&#23450;&#20041;&#24322;&#24120;&#25511;&#21046;&#22120;&#31867;&#12290;<code>src\/Controller<\/code>&#30446;&#24405;&#12290;&#20174;Symfony&#30340;AbstractController&#25110;&#20854;&#20182;&#36866;&#21512;&#24744;&#38656;&#27714;&#30340;&#22522;&#30784;&#31867;&#25193;&#23637;&#23427;&#12290;&#25511;&#21046;&#22120;&#24212;&#26377;&#19968;&#20010;&#21160;&#20316;&#26041;&#27861;&#65292;&#20363;&#22914;<code>showAction<\/code>&#36825;&#20351;&#24471;&#24744;&#30340;&#33258;&#23450;&#20041;&#38169;&#35823;&#27169;&#26495;&#65306;<\/p><pre><code>namespace AppController;\n\nuse SymfonyComponentHttpKernelExceptionHttpExceptionInterface;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationResponse;\n\nclass CustomExceptionController extends AbstractController\n{\n    public function showAction(HttpExceptionInterface $exception): Response\n    {\n        return new Response(\n            $this-&gt;renderView('bundles\/TwigBundle\/Exception\/error.html.twig', [\n                'message' =&gt; 'Something went wrong.',\n            ]),\n            $exception-&gt;getStatusCode()\n        );\n    }\n}\n<\/code><\/pre><h3>&#27493;&#39588; 2&#65306;&#37197;&#32622;&#25511;&#21046;&#22120;&#26381;&#21153;<\/h3><p>&#22312;&#24744;&#30340;&#26381;&#21153;&#37197;&#32622;&#25991;&#20214;&#20013;&#65292;&#36890;&#24120;&#20301;&#20110;<code>config\/services.yaml<\/code>&#24744;&#38656;&#35201;&#23558;&#25511;&#21046;&#22120;&#27880;&#20876;&#20026;&#26381;&#21153;&#65306;<\/p><pre><code>services:\n    AppControllerCustomExceptionController:\n        tags:\n            - { name: 'controller.service_arguments' }\n<\/code><\/pre><h2>&#27979;&#35797;&#24744;&#30340;404&#38169;&#35823;&#39029;&#38754;<\/h2><p>&#22312;&#37197;&#32622;&#33258;&#23450;&#20041;&#38169;&#35823;&#39029;&#38754;&#25110;&#25511;&#21046;&#22120;&#21518;&#65292;&#24212;&#36890;&#36807;&#35775;&#38382;&#24212;&#29992;&#31243;&#24207;&#20013;&#30340;&#38750;&#23384;&#22312;URL&#26469;&#27979;&#35797;&#23427;&#12290;&#24744;&#24212;&#35813;&#30475;&#21040;&#24744;&#30340;&#33258;&#23450;&#20041;404&#38169;&#35823;&#39029;&#12290;<\/p><h2>&#27491;&#22312;&#22788;&#29702;404&#38169;&#35823;&#35760;&#24405;&#12290;<\/h2><p>&#26085;&#24535;&#38169;&#35823;&#23545;&#20110;&#32500;&#25252;&#21644;&#35843;&#35797;&#26469;&#35828;&#38750;&#24120;&#37325;&#35201;&#12290;Symfony &#25552;&#20379;&#20102;&#19968;&#20010;&#21517;&#20026; Monolog &#30340;&#26085;&#24535;&#26381;&#21153;&#65292;&#36825;&#20010;&#26381;&#21153;&#38750;&#24120;&#23481;&#26131;&#37197;&#32622;&#21644;&#20351;&#29992;&#12290;&#40664;&#35748;&#24773;&#20917;&#19979;&#65292;&#23427;&#20250;&#35760;&#24405;&#25152;&#26377;&#38169;&#35823;&#65292;&#21253;&#25324; 404 &#38169;&#35823;&#12290;&#20294;&#26159;&#65292;&#35831;&#30830;&#20445;&#22312;&#24744;&#30340;&#29615;&#22659;&#20013;&#27491;&#30830;&#37197;&#32622;&#20102;&#23427;&#12290;<code>config\/packages\/prod\/monolog.yaml<\/code>&#22312;&#29983;&#20135;&#29615;&#22659;&#20013;&#35760;&#24405;&#38169;&#35823;&#12290;<\/p><h2>&#39640;&#32423;&#65306;&#20107;&#20214;&#30417;&#21548;&#22120;<\/h2><p>&#22312;Symfony&#20013;&#21019;&#24314;&#19968;&#20010;&#20107;&#20214;&#30417;&#21548;&#22120;&#25110;&#35746;&#38405;&#32773;&#20197;&#22788;&#29702;&#20107;&#20214;&#12290;<code>kernel.exception<\/code>&#20107;&#20214;&#26159;&#19968;&#31181;&#24378;&#22823;&#30340;&#26041;&#27861;&#65292;&#29992;&#20110;&#31649;&#29702;&#20687;404 Not Found&#38169;&#35823;&#36825;&#26679;&#30340;&#24322;&#24120;&#24773;&#20917;&#65292;&#21516;&#26102;&#25552;&#20379;&#26356;&#22810;&#30340;&#25511;&#21046;&#21644;&#22797;&#26434;&#24615;&#12290;&#20197;&#19979;&#26159;&#23454;&#29616;&#23427;&#30340;&#27493;&#39588;&#65306;<\/p><h3>&#27493;&#39588;1&#65306;&#21019;&#24314;&#20107;&#20214;&#30417;&#21548;&#22120;&#31867;<\/h3><p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#31867;&#26469;&#30417;&#21548;&#12290;<code>kernel.exception<\/code>&#20107;&#20214;&#12290;<\/p><pre><code>\/\/ src\/EventListener\/ExceptionListener.php\r\n\r\nnamespace AppEventListener;\r\n\r\nuse SymfonyComponentHttpFoundationResponse;\r\nuse SymfonyComponentHttpKernelEventExceptionEvent;\r\nuse SymfonyComponentHttpKernelExceptionHttpExceptionInterface;\r\n\r\nclass ExceptionListener\r\n{\r\n    public function onKernelException(ExceptionEvent $event)\r\n    {\r\n        \/\/ Retrieve the exception object from the received event\r\n        $exception = $event-&gt;getThrowable();\r\n\r\n        \/\/ Create a custom response for specific exception types\r\n        if ($exception instanceof HttpExceptionInterface &amp;&amp; $exception-&gt;getStatusCode() == 404) {\r\n            $response = new Response('Page not found', 404);\r\n        } else {\r\n            $response = new Response('An error occurred', 500);\r\n        }\r\n\r\n        \/\/ Set the response object on the event\r\n        $event-&gt;setResponse($response);\r\n    }\r\n}\r\n<\/code><\/pre><p>&#22312;&#36825;&#19968;&#35838;&#19978;&#65292;<code>onKernelException<\/code>&#26041;&#27861;&#26816;&#26597;&#24322;&#24120;&#30340;&#31867;&#22411;&#65292;&#24182;&#26681;&#25454;&#24773;&#20917;&#35774;&#32622;&#33258;&#23450;&#20041;&#21709;&#24212;&#12290;<\/p><h3>&#27493;&#39588;2&#65306;&#27880;&#20876;&#20107;&#20214;&#30417;&#21548;&#22120;<\/h3><p>&#25509;&#19979;&#26469;&#65292;&#20026;&#24744;&#30340;&#21548;&#20247;&#27880;&#20876;&#12290;<code>kernel.exception<\/code>&#24744;&#30340;&#20107;&#20214;&#26159;&#20160;&#20040;&#65311;<code>services.yaml<\/code>: &#20320;&#22909;&#65281;&#26377;&#20160;&#20040;&#25105;&#21487;&#20197;&#24110;&#21161;&#24744;&#30340;&#21527;&#65311;<\/p><pre><code># config\/services.yaml\r\n\r\nservices:\r\n    AppEventListenerExceptionListener:\r\n        tags:\r\n            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }\r\n<\/code><\/pre><p>&#36825;&#20010;&#37197;&#32622;&#30830;&#20445;&#24403;&#30417;&#21548;&#32773;&#38656;&#35201;&#26102;&#65292;&#23601;&#20250;&#35843;&#29992;&#35813;&#30417;&#21548;&#32773;&#12290;<code>kernel.exception<\/code>&#20107;&#20214;&#24050;&#35302;&#21457;&#12290;<\/p><h3>&#20351;&#29992;&#20107;&#20214;&#30417;&#21548;&#22120;<\/h3><p>&#22312;&#36825;&#31181;&#35774;&#32622;&#19979;&#65292;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#23558;&#20351;&#29992;&#12290;<code>ExceptionListener<\/code>&#22312;&#22788;&#29702;&#24322;&#24120;&#26102;&#65292;&#25105;&#20204;&#23558;&#36820;&#22238;&#19968;&#20010;&ldquo;&#39029;&#38754;&#26410;&#25214;&#21040;&rdquo;&#30340;&#21709;&#24212;&#12290;&#23545;&#20110;&#20854;&#20182;&#31867;&#22411;&#30340;&#24322;&#24120;&#65292;&#25105;&#20204;&#23558;&#20250;&#36820;&#22238;&ldquo;&#21457;&#29983;&#38169;&#35823;&rdquo;&#12290;<\/p><p>&#37325;&#35201;&#25552;&#31034;&#65306;<\/p><p>&#26681;&#25454;&#24322;&#24120;&#31867;&#22411;&#25110;&#20854;&#20182;&#26631;&#20934;&#36827;&#19968;&#27493;&#23450;&#21046;&#21709;&#24212;&#65292;&#21487;&#20197;&#22312;&#38169;&#35823;&#22330;&#26223;&#20013;&#25552;&#21319;&#29992;&#25143;&#20307;&#39564;&#12290;<\/p><p>&#36825;&#31181;&#26041;&#27861;&#25552;&#20379;&#20102;&#26497;&#22823;&#30340;&#28789;&#27963;&#24615;&#65292;&#20294;&#38656;&#35201;&#35880;&#24910;&#22788;&#29702;&#19981;&#21516;&#30340;&#24322;&#24120;&#31867;&#22411;&#20197;&#36991;&#20813;&#24847;&#22806;&#34892;&#20026;&#12290;<\/p><p>&#30830;&#20445;&#22312;&#19981;&#21516;&#30340;&#22330;&#26223;&#19979;&#23545;&#35813;&#30417;&#21548;&#22120;&#36827;&#34892;&#24443;&#24213;&#27979;&#35797;&#65292;&#20197;&#30830;&#20445;&#23427;&#25353;&#39044;&#26399;&#24037;&#20316;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#24050;&#32463;&#20171;&#32461;&#20102;&#22788;&#29702;Symfony&#20013;&#30340;404&#38169;&#35823;&#30340;&#22522;&#26412;&#26041;&#27861;&#12290;&#25105;&#20204;&#35752;&#35770;&#20102;&#20351;&#29992;&#40664;&#35748;&#30340;&#38169;&#35823;&#39029;&#38754;&#12289;&#21019;&#24314;&#33258;&#23450;&#20041;&#30340;&#38169;&#35823;&#39029;&#38754;&#12289;&#35774;&#32622;&#33258;&#23450;&#20041;&#24322;&#24120;&#25511;&#21046;&#22120;&#12289;&#26085;&#24535;&#35760;&#24405;&#20197;&#21450;&#39640;&#32423;&#20107;&#20214;&#22788;&#29702;&#12290;&#27491;&#30830;&#30340;&#38169;&#35823;&#22788;&#29702;&#21487;&#20197;&#25552;&#39640;&#24212;&#29992;&#31243;&#24207;&#30340;&#29992;&#25143;&#20307;&#39564;&#65292;&#24182;&#34920;&#26126;&#19968;&#20010;&#33391;&#22909;&#30340;Web&#26381;&#21153;&#24050;&#32463;&#34987;&#23454;&#29616;&#12290;&#36890;&#36807;&#20102;&#35299;&#22914;&#20309;&#31649;&#29702;Symfony&#20013;&#30340;404&#38169;&#35823;&#65292;&#20320;&#21487;&#20197;&#30830;&#20445;&#20320;&#30340;&#24212;&#29992;&#31243;&#24207;&#22312;&#36935;&#21040;&#25439;&#22351;&#38142;&#25509;&#25110;&#20002;&#22833;&#32593;&#39029;&#26102;&#33021;&#20248;&#38597;&#22320;&#34920;&#29616;&#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;&#22788;&#29702; 404 &#38169;&#35823;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#38656;&#27714;&#65292;&#29305;&#21035;&#26159;&#22312;&#26500;&#24314;&#21160;&#24577;&#32593;&#31449;&#26102;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#20351;&#29992; Symfony &#23448;&#26041;&#25991;&#26723;&#20013;&#30340;&#31034;&#20363;&#26469;&#23454;&#29616;&#36825;&#20010;&#21151;&#33021;&#30340;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#23433;&#35013;&#20102; Symfony&#12290;&#22914;&#26524;&#27809;&#26377;&#65292;&#35831;&#36816;&#34892; <code>composer require symfony\/symfony<\/code>&#12290;<\/p>\n<\/li>\n<li>\n<p>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340; Symfony &#24212;&#29992;&#24182;&#21551;&#21160;&#26381;&#21153;&#22120;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#23548;&#20837; Symfony &#30340; <code>Twig<\/code> &#21644; <code>Form<\/code> &#27169;&#22359;&#65292;&#24182;&#21019;&#24314;&#19968;&#20010;&#25511;&#21046;&#22120;&#21644;&#35270;&#22270;&#25991;&#20214;&#65288;&#20363;&#22914; <code>Controller.php<\/code> &#21644; <code>View.php<\/code>&#65289;&#12290;<\/p>\n<\/li>\n<\/ol>\n<p>&#20197;&#19979;&#26159;&#22522;&#26412;&#30340;&#25511;&#21046;&#22120;&#21644;&#35270;&#22270;&#25991;&#20214;&#32467;&#26500;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\n\nclass HomeController extends AbstractController\n{\n    \/**\n     * @Route(\"\/\", name=\"home\")\n     *\/\n    public function index(): Response\n    {\n        return $this-&gt;render('home\/index.html.twig', [\n            'controller_name' =&gt; 'HomeController',\n        ]);\n    }\n}<\/code><\/pre>\n<pre><code class=\"language-twig\">{% extends \"layout.html.twig\" %}\n\n{% block content %}\n  &lt;h1&gt;Hello, world!&lt;\/h1&gt;\n{% endblock %}<\/code><\/pre>\n<p>&#29616;&#22312;&#25105;&#20204;&#24050;&#32463;&#23450;&#20041;&#20102;&#19968;&#20010;&#31616;&#21333;&#30340;&#25511;&#21046;&#22120;&#21644;&#35270;&#22270;&#12290;&#25509;&#19979;&#26469;&#65292;&#25105;&#20204;&#38656;&#35201;&#32534;&#20889;&#19968;&#20010;&#22788;&#29702; 404 &#38169;&#35823;&#30340;&#20989;&#25968;&#12290;&#36825;&#21487;&#20197;&#36890;&#36807;&#23558;&#35270;&#22270;&#25991;&#20214;&#37325;&#21629;&#21517;&#20026; <code>404.html.twig<\/code> &#24182;&#28155;&#21152;&#19968;&#20123;&#27169;&#26495;&#26631;&#31614;&#26469;&#23436;&#25104;&#12290;<\/p>\n<p>&#22312; <code>Controller.php<\/code> &#25991;&#20214;&#20013;&#28155;&#21152;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SensioBundleFrameworkExtraBundleConfigurationIsGranted;\nuse SymfonyComponentHttpFoundationRedirectResponse;\nuse SymfonyComponentRoutingAnnotationRoute;\nuse SymfonyComponentSecurityCoreExceptionAccessDeniedException;\n\nclass ErrorController extends AbstractController\n{\n    \/**\n     * @Route(\"\/404\", name=\"error_404\")\n     *\/\n    public function showAction()\n    {\n        if ($this-&gt;getUser()) {\n            \/\/ Check if the user has permissions to access this page\n            if (!$this-&gt;isGranted('ROLE_ADMIN')) {\n                throw new AccessDeniedException();\n            }\n\n            \/\/ Render the 404 template with a redirect response\n            return $this-&gt;redirect($this-&gt;generateUrl('home'));\n        } else {\n            \/\/ Redirect to the login page if no user is logged in\n            return $this-&gt;redirectToRoute('login');\n        }\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#25511;&#21046;&#22120;&#20013;&#65292;&#25105;&#20204;&#26816;&#26597;&#24403;&#21069;&#29992;&#25143;&#26159;&#21542;&#26377;&#26435;&#38480;&#35775;&#38382;&#27492;&#39029;&#38754;&#12290;&#22914;&#26524;&#29992;&#25143;&#27809;&#26377;&#26435;&#38480;&#65292;&#21017;&#25243;&#20986;&#24322;&#24120;&#24182;&#37325;&#23450;&#21521;&#21040;&#30331;&#24405;&#39029;&#38754;&#12290;&#21542;&#21017;&#65292;&#28210;&#26579; 404 &#35270;&#22270;&#24182;&#23558;&#29992;&#25143;&#37325;&#23450;&#21521;&#22238;&#20027;&#39029;&#12290;<\/p>\n<p>&#26368;&#21518;&#65292;&#35753;&#25105;&#20204;&#26356;&#26032;&#35270;&#22270;&#25991;&#20214;&#65288;<code>404.html.twig<\/code>&#65289;&#65292;&#20351;&#20854;&#21709;&#24212;&#37325;&#23450;&#21521;&#35831;&#27714;&#65306;<\/p>\n<pre><code class=\"language-html\">&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;404 - Not Found&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;404 - Not Found&lt;\/h1&gt;\n    &lt;p&gt;The requested URL was not found on this server.&lt;\/p&gt;\n    &lt;a href=\"{{ path('home') }}\"&gt;Go Home&lt;\/a&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>&#29616;&#22312;&#65292;&#24403;&#29992;&#25143;&#23581;&#35797;&#35775;&#38382;&#19981;&#23384;&#22312;&#30340;&#36335;&#24452;&#26102;&#65292;&#20182;&#20204;&#23558;&#34987;&#37325;&#23450;&#21521;&#21040;&#20027;&#39029;&#12290;&#36825;&#26159;&#19968;&#20010;&#38750;&#24120;&#23454;&#29992;&#30340;&#21151;&#33021;&#65292;&#21487;&#20197;&#38450;&#27490;&#26410;&#25480;&#26435;&#30340;&#35775;&#38382;&#32773;&#27983;&#35272;&#25935;&#24863;&#20869;&#23481;&#12290;<\/p>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#24744;&#24212;&#35813;&#33021;&#22815;&#25104;&#21151;&#22320;&#22312; Symfony &#20013;&#22788;&#29702; 404 &#38169;&#35823;&#12290;&#35831;&#26681;&#25454;&#24744;&#30340;&#20855;&#20307;&#38656;&#27714;&#35843;&#25972;&#19978;&#36848;&#20195;&#30721;&#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;&#22788;&#29702;404&#38169;&#35823;&#36890;&#24120;&#28041;&#21450;&#20197;&#19979;&#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-1061","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\/1061","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=1061"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1061"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1061"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}