{"id":825,"date":"2025-06-12T00:34:06","date_gmt":"2025-06-11T16:34:06","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/825.html"},"modified":"2025-06-12T00:34:06","modified_gmt":"2025-06-11T16:34:06","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8laravel%e4%b8%ad%e5%88%9b%e5%bb%baxml%e7%ab%99%e7%82%b9%e5%9c%b0%e5%9b%be","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/825.html","title":{"rendered":"\u5982\u4f55\u5728Laravel\u4e2d\u521b\u5efaXML\u7ad9\u70b9\u5730\u56fe"},"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;Laravel&#20013;&#21019;&#24314;XML&#31449;&#28857;&#22320;&#22270;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#36807;&#31243;&#65292;&#21487;&#20197;&#21033;&#29992;Laravel&#30340;&#20869;&#32622;&#21151;&#33021;&#21644;&#19968;&#20123;&#31532;&#19977;&#26041;&#24211;&#26469;&#23454;&#29616;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#35814;&#32454;&#30340;&#27493;&#39588;&#25351;&#21335;&#65292;&#21253;&#25324;&#20351;&#29992;<code>laravel-sitemap<\/code>&#24211;&#12290;<\/p>\n<h3>1. &#23433;&#35013;laravel-sitemap<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013;<code>laravel-sitemap<\/code>&#24211;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807;Composer&#26469;&#23436;&#25104;&#36825;&#20010;&#36807;&#31243;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require laravel\/sitemap<\/code><\/pre>\n<h3>2. &#37197;&#32622;laravel-sitemap<\/h3>\n<p>&#25509;&#19979;&#26469;&#65292;&#20320;&#38656;&#35201;&#37197;&#32622;laravel-sitemap&#12290;&#22312;<code>config\/app.php<\/code>&#25991;&#20214;&#20013;&#28155;&#21152;&#26381;&#21153;&#25552;&#20379;&#32773;&#65306;<\/p>\n<pre><code class=\"language-php\">'providers' =&gt; [\n    \/\/ ...\n    LaravelSitemapSitemapServiceProvider::class,\n],<\/code><\/pre>\n<p>&#28982;&#21518;&#22312;<code>config\/services.php<\/code>&#25991;&#20214;&#20013;&#27880;&#20876;Sitemap&#26381;&#21153;&#65306;<\/p>\n<pre><code class=\"language-php\">'sitemaps' =&gt; [\n    'sitemap' =&gt; LaravelSitemapSitemapServiceProvider::class,\n],<\/code><\/pre>\n<h3>3. &#21019;&#24314;&#31449;&#28857;&#22320;&#22270;&#25511;&#21046;&#22120;<\/h3>\n<p>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;&#29983;&#25104;&#31449;&#28857;&#22320;&#22270;&#30340;&#20219;&#21153;&#65306;<\/p>\n<pre><code class=\"language-bash\">php artisan make:controller SitemapController<\/code><\/pre>\n<p>&#22312;<code>app\/Http\/Controllers\/SitemapController.php<\/code>&#25991;&#20214;&#20013;&#32534;&#20889;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse LaravelSitemapSitemapGenerator;\n\nclass SitemapController extends Controller\n{\n    public function index()\n    {\n        $generator = new SitemapGenerator('http:\/\/yourdomain.com');\n\n        \/\/ &#28155;&#21152;&#38745;&#24577;&#39029;&#38754;\n        $generator-&gt;add('https:\/\/yourdomain.com', time());\n\n        \/\/ &#28155;&#21152;&#21160;&#24577;&#39029;&#38754;\n        $posts = AppPost::latest()-&gt;take(5)-&gt;get();\n        foreach ($posts as $post) {\n            $generator-&gt;add($post-&gt;url, $post-&gt;updated_at);\n        }\n\n        return $generator-&gt;render();\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#28155;&#21152;&#20102;&#20004;&#20010;&#31867;&#22411;&#30340;URL&#65306;&#19968;&#20010;&#38745;&#24577;&#39029;&#38754;&#65288;&#26681;&#22495;&#21517;&#65289;&#65292;&#21478;&#19968;&#20010;&#26159;&#21160;&#24577;&#39029;&#38754;&#65288;&#26368;&#26032;&#21457;&#24067;&#30340;&#20116;&#31687;&#25991;&#31456;&#65289;&#12290;<\/p>\n<h3>4. &#37197;&#32622;&#36335;&#30001;<\/h3>\n<p>&#22312;<code>routes\/web.php<\/code>&#25991;&#20214;&#20013;&#28155;&#21152;&#36335;&#30001;&#65306;<\/p>\n<pre><code class=\"language-php\">Route::get('\/sitemap.xml', 'SitemapController@index');<\/code><\/pre>\n<p>&#36825;&#26679;&#65292;&#24403;&#20320;&#35775;&#38382;<code>\/sitemap.xml<\/code>&#26102;&#65292;&#23601;&#20250;&#24471;&#21040;&#19968;&#20010;XML&#26684;&#24335;&#30340;&#31449;&#28857;&#22320;&#22270;&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;Laravel&#20013;&#21019;&#24314;&#24182;&#36820;&#22238;XML&#31449;&#28857;&#22320;&#22270;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ app\/Http\/Controllers\/SitemapController.php\nnamespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse LaravelSitemapSitemapGenerator;\n\nclass SitemapController extends Controller\n{\n    public function index()\n    {\n        $generator = new SitemapGenerator('http:\/\/yourdomain.com');\n\n        \/\/ &#28155;&#21152;&#38745;&#24577;&#39029;&#38754;\n        $generator-&gt;add('https:\/\/yourdomain.com', time());\n\n        \/\/ &#28155;&#21152;&#21160;&#24577;&#39029;&#38754;\n        $posts = AppPost::latest()-&gt;take(5)-&gt;get();\n        foreach ($posts as $post) {\n            $generator-&gt;add($post-&gt;url, $post-&gt;updated_at);\n        }\n\n        return $generator-&gt;render();\n    }\n}<\/code><\/pre>\n<p>&#36816;&#34892;<code>php artisan serve<\/code>&#21518;&#65292;&#35775;&#38382;<code>http:\/\/localhost:8000\/sitemap.xml<\/code>&#65292;&#20320;&#24212;&#35813;&#20250;&#30475;&#21040;&#19968;&#20010;&#21253;&#21547;&#25152;&#26377;&#38745;&#24577;&#39029;&#38754;&#21644;&#21160;&#24577;&#39029;&#38754;&#30340;XML&#31449;&#28857;&#22320;&#22270;&#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>XML&#31449;&#28857;&#22320;&#22270;&#26159;&#19968;&#31181;&#25628;&#32034;&#24341;&#25806;&#20248;&#21270;&#30340;&#37325;&#35201;&#24037;&#20855;&#12290;&#23427;&#24110;&#21161;&#25628;&#32034;&#24341;&#25806;&#26356;&#22909;&#22320;&#29702;&#35299;&#24744;&#30340;&#32593;&#31449;&#32467;&#26500;&#24182;&#26377;&#25928;&#22320;&#32034;&#24341;&#20854;&#20869;&#23481;&#12290;&#22312;Laravel&#24212;&#29992;&#31243;&#24207;&#20013;&#26500;&#24314;XML&#31449;&#28857;&#22320;&#22270;&#28041;&#21450;&#20960;&#20010;&#27493;&#39588;&#21644;&#19968;&#20123;&#32534;&#30721;&#65292;&#20294;&#19981;&#35201;&#25285;&#24515;&#65281;&#22312;&#36825;&#31687;&#25351;&#21335;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#35752;&#22914;&#20309;&#20026;&#24744;&#30340;Laravel&#24212;&#29992;&#29983;&#25104;&#21160;&#24577;&#30340;XML&#31449;&#28857;&#22320;&#22270;&#20197;&#25552;&#39640;SEO&#12290;<\/p><h2>&#29702;&#35299;XML&#31449;&#28857;&#22320;&#22270;<\/h2><p>XML&#31449;&#28857;&#22320;&#22270;&#26159;&#19968;&#31181;&#25991;&#20214;&#65292;&#23427;&#21015;&#20986;&#20102;&#32593;&#31449;&#19978;&#25152;&#26377;&#37325;&#35201;&#30340;URL&#12290;&#36825;&#26159;&#21578;&#35785;&#25628;&#32034;&#24341;&#25806;&#20851;&#20110;&#20854;&#32593;&#31449;&#19978;&#30340;&#21487;&#34987;&#29228;&#34411;&#35775;&#38382;&#30340;&#39029;&#38754;&#30340;&#19968;&#31181;&#26041;&#24335;&#12290;&#31449;&#28857;&#22320;&#22270;&#36824;&#25552;&#20379;&#20102;&#19982;&#21015;&#20986;&#30340;&#39029;&#38754;&#30456;&#20851;&#30340;&#26377;&#20215;&#20540;&#20803;&#25968;&#25454;&#65292;&#20363;&#22914;&#39029;&#38754;&#19978;&#27425;&#26356;&#26032;&#30340;&#26102;&#38388;&#12289;&#26356;&#25913;&#39057;&#29575;&#20197;&#21450;&#30456;&#23545;&#20110;&#32593;&#31449;&#20854;&#20182;URL&#30340;&#37325;&#35201;&#24615;&#12290;<\/p><h2>&#35774;&#32622;&#24744;&#30340;Laravel&#39033;&#30446;<\/h2><p>&#22914;&#26524;&#20320;&#36824;&#27809;&#26377;&#35774;&#32622;Laravel&#39033;&#30446;&#65292;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;&#21629;&#20196;&#21019;&#24314;&#19968;&#20010;&#65306;<\/p><pre><code>composer create-project --prefer-dist laravel\/laravel your-project-name\ncd your-project-name\n<\/code><\/pre><p>&#30830;&#20445;&#22312;&#36816;&#34892;Laravel&#39033;&#30446;&#26102;&#24050;&#27491;&#30830;&#35774;&#32622;&#24517;&#35201;&#30340;&#29615;&#22659;&#65292;&#21253;&#25324;PHP&#12289;Composer&#20197;&#21450;&#22914;Apache&#25110;Nginx&#31561;&#36866;&#24403;&#30340;&#26381;&#21153;&#22120;&#29615;&#22659;&#12290;<\/p><h2>&#32534;&#20889;&#32593;&#31449;&#22320;&#22270;<\/h2><p>&#25105;&#20204;&#39318;&#20808;&#23433;&#35013;&#19968;&#20010;sitemap&#21253;&#65292;&#20363;&#22914;<code>spatie\/laravel-sitemap<\/code>&#23433;&#35013;&#21253;&#20351;&#29992; Composer&#65306;<\/p><pre><code>composer require spatie\/laravel-sitemap\n<\/code><\/pre><p>&#19968;&#26086;&#23433;&#35013;&#23436;&#25104;&#65292;&#23601;&#21487;&#20197;&#25163;&#21160;&#20351;&#29992;&#35813;&#21253;&#30340;&#21151;&#33021;&#29983;&#25104;sitemap&#65306;<\/p><pre><code>use SpatieSitemapSitemapGenerator;\n\nSitemapGenerator::create(config('app.url'))-&gt;writeToFile(public_path('sitemap.xml'));\n<\/code><\/pre><p>&#19978;&#36848;&#20195;&#30721;&#23558;&#22312;&#24744;&#30340;&#20844;&#20849;&#30446;&#24405;&#20013;&#21019;&#24314;&#19968;&#20010;sitemap.xml&#25991;&#20214;&#12290;&#24744;&#21487;&#20197;&#26681;&#25454;&#20010;&#20154;&#21916;&#22909;&#20174;&#36335;&#30001;&#25110;&#21629;&#20196;&#35843;&#29992;&#27492;&#20195;&#30721;&#12290;<\/p><h2>&#21019;&#24314;&#19968;&#20010;sitemap&#36335;&#30001;<\/h2><p>&#21019;&#24314;&#19968;&#20010;&#36335;&#32447;&#12290;<code>routes\/web.php<\/code>&#20026;&#20102;&#29983;&#25104;&#24182;&#36820;&#22238;sitemap&#65292;&#35831;&#21578;&#35785;&#25105;&#24744;&#38656;&#35201;&#29983;&#25104;&#30340;&#31449;&#28857;&#20449;&#24687;&#12290;<\/p><pre><code>use IlluminateSupportFacadesRoute;\nuse SpatieSitemapSitemapGenerator;\n\nRoute::get('\/sitemap.xml', function() {\n    return SitemapGenerator::create(config('app.url'))-&gt;getSitemap()-&gt;toResponse(request());\n});\n<\/code><\/pre><p>&#36825;&#26465;&#36335;&#32447;&#20250;&#29983;&#25104;sitemap&#65292;&#24403;&#20320;&#35775;&#38382;&#26102;&#23601;&#20250;&#29983;&#25104;&#12290;<code>\/sitemap.xml<\/code>&#25105;&#24050;&#32463;&#25910;&#21040;&#24744;&#30340;&#30003;&#35831;&#20102;&#12290;<\/p><h2>&#23450;&#21046;Sitemap<\/h2><p>&#35753;&#25105;&#20204;&#33258;&#23450;&#20041;&#31449;&#28857;&#22320;&#22270;&#65292;&#28155;&#21152;&#22914;&#38745;&#24577;&#12289;&#21160;&#24577;&#25110;&#23186;&#20307;&#20869;&#23481;&#31561;&#19981;&#21516;&#31867;&#22411;&#39029;&#38754;&#65306;<\/p><h3>&#28155;&#21152;&#38745;&#24577;&#39029;&#38754;<\/h3><p>&#38745;&#24577;&#39029;&#38754;&#26159;&#26368;&#23481;&#26131;&#28155;&#21152;&#21040;&#31449;&#28857;&#22320;&#22270;&#20013;&#30340;&#12290;&#21482;&#38656;&#20351;&#29992;&#23427;&#12290;<code>Sitemap<\/code>&#22352;&#22909;&#65292;&#21516;&#23398;&#20204;&#12290;<\/p><pre><code>use SpatieSitemapSitemap;\nuse SpatieSitemapTagsUrl;\n\n$sitemap = Sitemap::create()\n    -&gt;add(Url::create('\/home')-&gt;setLastModificationDate(CarbonCarbon::yesterday())\n       -&gt;setChangeFrequency(Url::CHANGE_FREQUENCY_WEEKLY)\n       -&gt;setPriority(0.9))\n    ...\n$sitemap-&gt;writeToFile(public_path('sitemap.xml'));\n<\/code><\/pre><h3>&#28155;&#21152;&#21160;&#24577;&#20869;&#23481;<\/h3><p>&#23545;&#20110;&#21160;&#24577;&#20869;&#23481;&#22914;&#21338;&#23458;&#25991;&#31456;&#65292;&#21487;&#20197;&#20174;&#25968;&#25454;&#24211;&#20013;&#26816;&#32034;&#23427;&#20204;&#65292;&#24182;&#36880;&#20010;URL&#28155;&#21152;&#21040;sitemap&#20013;&#65306;<\/p><pre><code>use AppModelsPost;\n\n$posts = Post::all();\nforeach ($posts as $post) {\n    $sitemap-&gt;add(...);\n}\n<\/code><\/pre><h3>&#28155;&#21152;&#23186;&#20307;&#20869;&#23481;<\/h3><p>&#23545;&#20110;&#24744;&#20869;&#23481;&#20013;&#30340;&#22270;&#29255;&#25110;&#35270;&#39057;&#65292;&#35831;&#28155;&#21152;&#12290;<code>Images<\/code>&#21734;&#65292;&#23545;&#20102;&#12290;<code>Videos<\/code>&#26631;&#31614;&#65306;<\/p><pre><code>use SpatieSitemapTagsImage;\n\n$sitemap-&gt;add(Url::create('\/page-with-image')\n    -&gt;setLastModificationDate(...)\n    -&gt;addImage(Image::create('\/url-to-image')));\n<\/code><\/pre><p>&#35831;&#35760;&#20303;&#65292;&#20445;&#25345;&#31449;&#28857;&#22320;&#22270;&#30340;&#26356;&#26032;&#33267;&#20851;&#37325;&#35201;&#12290;&#23545;&#20110;&#22823;&#22411;&#19988;&#21160;&#24577;&#30340;&#32593;&#31449;&#65292;&#32771;&#34385;&#20351;&#29992;&#23450;&#26102;&#20219;&#21153;&#65288;cron jobs&#65289;&#33258;&#21160;&#22312;&#25351;&#23450;&#26102;&#38388;&#29983;&#25104;&#31449;&#28857;&#22320;&#22270;&#12290;&#36825;&#21487;&#20197;&#36890;&#36807;Laravel&#30340;&#35843;&#24230;&#21151;&#33021;&#23454;&#29616;&#12290;<code>ConsoleKernel<\/code>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#22826;&#26126;&#30333;&#24744;&#30340;&#38382;&#39064;&#12290;&#22914;&#26524;&#24744;&#26377;&#20854;&#20182;&#38656;&#35201;&#24110;&#21161;&#30340;&#65292;&#35831;&#35814;&#32454;&#35828;&#26126;&#12290;<\/p><h2>&#24314;&#35774;&#25351;&#25381;&#20307;&#31995;<\/h2><p>&#21019;&#24314;&#19968;&#20010;&#33258;&#23450;&#20041;&#21629;&#20196;&#26159;&#36890;&#36807;&#22312;&#29305;&#23450;&#30340;&#21629;&#20196;&#34892;&#30028;&#38754;&#25110;&#33050;&#26412;&#29615;&#22659;&#20013;&#20351;&#29992;&#29305;&#23450;&#30340;&#35821;&#27861;&#26469;&#23454;&#29616;&#30340;&#65292;&#20197;&#25191;&#34892;&#29305;&#23450;&#30340;&#21151;&#33021;&#12290;&#36825;&#36890;&#24120;&#28041;&#21450;&#21040;&#32534;&#20889;&#19968;&#20123;&#20195;&#30721;&#25110;&#32773;&#20351;&#29992;&#39044;&#35774;&#30340;&#25351;&#20196;&#38598;&#12290;\n&#20363;&#22914;&#65292;&#22312;Linux&#31995;&#32479;&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;alias&#21629;&#20196;&#26469;&#21019;&#24314;&#33258;&#23450;&#20041;&#21629;&#20196;&#65306;\nalias mycommand=&#8217;your_command_here&#8217;\n&#36825;&#26679;&#65292;&#24403;&#20320;&#36755;&#20837;mycommand&#26102;&#65292;&#23427;&#23601;&#20250;&#25191;&#34892;your_command_here&#12290;\n&#22312;Windows PowerShell&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;Set-Alias&#21629;&#20196;&#65306;\nSet-Alias -Name myCommand -Value yourCommandHere\n&#22312;Python&#20013;&#65292;&#20320;&#21487;&#20197;&#21019;&#24314;&#19968;&#20010;&#21517;&#20026;custom_command.py&#30340;&#25991;&#20214;&#65292;&#20854;&#20013;&#21253;&#21547;&#20197;&#19979;&#20869;&#23481;&#65306;\ndef my_command():\n # &#20320;&#30340;&#21629;&#20196;&#36923;&#36753;&#22312;&#36825;&#37324;\n\nif __name__ == &#8220;__main__&#8221;:\n my_command()\n&#28982;&#21518;&#20320;&#21487;&#20197;&#20351;&#29992;importlib&#27169;&#22359;&#23548;&#20837;&#36825;&#20010;&#20989;&#25968;&#24182;&#21019;&#24314;&#19968;&#20010;&#33258;&#23450;&#20041;&#21629;&#20196;&#65306;\nfrom importlib.machinery import SourceFileLoader\ncmd = SourceFileLoader(&#8216;mycommand&#8217;, &#8216;path\/to\/custom_command.py&#8217;).load_module()\n\n# &#29616;&#22312;&#20320;&#21487;&#20197;&#20687;&#35843;&#29992;&#20219;&#20309;&#20854;&#20182;Python&#20989;&#25968;&#19968;&#26679;&#35843;&#29992;mycommand\ncmd.my_command()\n&#35831;&#27880;&#24847;&#65292;&#20855;&#20307;&#30340;&#26041;&#27861;&#21487;&#33021;&#20250;&#26681;&#25454;&#20320;&#20351;&#29992;&#30340;&#32534;&#31243;&#35821;&#35328;&#21644;&#29615;&#22659;&#26377;&#25152;&#19981;&#21516;&#12290;<code>php artisan make:command GenerateSitemap<\/code>&#28982;&#21518;&#65292;&#22312;&#21629;&#20196;&#30340;handle&#26041;&#27861;&#20013;&#65292;&#20320;&#21487;&#20197;&#35843;&#29992;sitemap&#29983;&#25104;&#36923;&#36753;&#65306;<\/p><pre><code>public function handle()\n{\n    SitemapGenerator::create(config('app.url'))-&gt;writeToFile(public_path('sitemap.xml'));\n}\n<\/code><\/pre><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#24050;&#32463;&#20171;&#32461;&#20102;&#22914;&#20309;&#22312;Laravel&#20013;&#21019;&#24314;XML&#31449;&#28857;&#22320;&#22270;&#65292;&#36825;&#23558;&#21521;&#25628;&#32034;&#24341;&#25806;&#25552;&#20379;&#24744;&#32593;&#31449;&#20869;&#23481;&#30340;&#36335;&#32447;&#22270;&#12290;&#35831;&#35760;&#20303;&#65292;&#38543;&#30528;&#24744;&#30340;&#32593;&#31449;&#21457;&#23637;&#65292;&#35831;&#19981;&#26029;&#20248;&#21270;&#21644;&#37325;&#26032;&#29983;&#25104;&#24744;&#30340;&#31449;&#28857;&#22320;&#22270;&#12290;&#36825;&#26679;&#20570;&#21487;&#20197;&#20351;&#25628;&#32034;&#24341;&#25806;&#26356;&#23481;&#26131;&#29228;&#34892;&#21644;&#32034;&#24341;&#24744;&#30340;&#20869;&#23481;&#65292;&#20174;&#32780;&#25552;&#39640;&#24744;&#30340;&#32593;&#31449;&#21487;&#35265;&#24615;&#65292;&#24182;&#21487;&#33021;&#25552;&#21319;&#20854;&#22312;&#25628;&#32034;&#32467;&#26524;&#20013;&#30340;&#25490;&#21517;&#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;Laravel&#20013;&#21019;&#24314;XML&#31449;&#28857;&#22320;&#22270;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;Elasticsearch&#21644;Xpath&#35299;&#26512;&#22120;&#26469;&#29983;&#25104;&#31449;&#28857;&#22320;&#22270;&#25991;&#20214;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#25191;&#34892;&#27492;&#25805;&#20316;&#30340;&#27493;&#39588;&#65306;<\/p>\n<h3>&#27493;&#39588; 1: &#23433;&#35013;&#24517;&#35201;&#30340;&#24211;<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#22312;&#39033;&#30446;&#20013;&#23433;&#35013;&#20102;&#20197;&#19979;&#20004;&#20010;&#20381;&#36182;&#65306;<\/p>\n<ul>\n<li>laravel-elasticsearch<\/li>\n<li>xpathtools<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">composer require \"laravel\/elasticsearch\"<\/code><\/pre>\n<p>&#28982;&#21518;&#36890;&#36807;Composer&#23433;&#35013;<code>xpath-tools<\/code>&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require \"johnklenk\/xpathtools\"<\/code><\/pre>\n<h3>&#27493;&#39588; 2: &#21019;&#24314;&#31449;&#28857;&#22320;&#22270;&#32034;&#24341;<\/h3>\n<p>&#35201;&#21019;&#24314;&#19968;&#20010;&#31449;&#28857;&#22320;&#22270;&#32034;&#24341;&#65292;&#20320;&#38656;&#35201;&#36816;&#34892;&#19968;&#20010;&#26597;&#35810;&#65292;&#25214;&#20986;&#25152;&#26377;&#20855;&#26377;&#29305;&#23450;&#31867;&#21517;&#65288;&#22914;&ldquo;site&rdquo;&#65289;&#30340;&#25152;&#26377;&#39029;&#38754;&#12290;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/\/ &#20551;&#35774;&#20320;&#26377;&#19968;&#20010;&#21517;&#20026;'pages.php'&#30340;&#36335;&#30001;&#25991;&#20214;&#65292;&#20854;&#20013;&#21253;&#21547;&#25152;&#26377;&#39029;&#38754;&#12290;\n$pages = App::make('AppHttpControllersPagesController')-&gt;getPages();\n\n\/\/ &#33719;&#21462;&#25152;&#26377;&#20855;&#26377;'site'&#31867;&#21517;&#30340;&#39029;&#38754;\n$sitePages = $pages-&gt;whereHas('categories', function ($query) {\n    $query-&gt;where('name', 'site');\n});\n\n\/\/ &#21019;&#24314;&#31449;&#28857;&#22320;&#22270; XML &#25991;&#20214;\n$xml = new DOMDocument();\n$xml-&gt;formatOutput = true;\n$xml-&gt;loadXML('&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;site_map xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"&gt;\n    &lt;root&gt;\n        &lt;?php foreach ($sitePages as $page): ?&gt;\n            &lt;link rel=\"alternate\" type=\"application\/rss+xml\" href=\"&lt;?php echo route($page-&gt;route); ?&gt;\" \/&gt;\n            &lt;link rel=\"alternate\" type=\"text\/html\" href=\"&lt;?php echo route($page-&gt;route); ?&gt;\"&gt;\n        &lt;?php endforeach; ?&gt;\n    &lt;\/root&gt;\n&lt;\/site_map&gt;');\n\n$xml-&gt;save('sitemap.xml');\n<\/code><\/pre>\n<p>&#36825;&#20010;&#33050;&#26412;&#23558;&#29983;&#25104;&#19968;&#20010;&#21517;&#20026;&#8217;sitemap.xml&#8217;&#30340;XML&#25991;&#20214;&#65292;&#35813;&#25991;&#20214;&#21253;&#21547;&#20102;&#25152;&#26377;&#20855;&#26377;&#25351;&#23450;&#31867;&#21517;&#65288;&#22312;&#36825;&#37324;&#26159;&#8217;site&#8217;&#65289;&#30340;&#39029;&#38754;&#30340;&#38142;&#25509;&#12290;<\/p>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#36825;&#27573;&#20195;&#30721;&#20351;&#29992;&#20102;Laravel&#30340;&#36335;&#30001;&#31995;&#32479;&#26469;&#33719;&#21462;&#39029;&#38754;&#21015;&#34920;&#65292;&#24182;&#21033;&#29992;Elasticsearch&#21644;XPath API&#26469;&#26597;&#25214;&#20855;&#26377;&#29305;&#23450;&#31867;&#21517;&#30340;&#39029;&#38754;&#12290;&#36825;&#21482;&#26159;&#19968;&#20010;&#22522;&#26412;&#30340;&#31034;&#20363;&#65292;&#23454;&#38469;&#24212;&#29992;&#20013;&#21487;&#33021;&#20250;&#26681;&#25454;&#38656;&#35201;&#35843;&#25972;&#26597;&#35810;&#26465;&#20214;&#21644;&#20854;&#20182;&#32454;&#33410;&#12290;<\/p>\n<h3>&#27880;&#24847;&#20107;&#39033;<\/h3>\n<ul>\n<li>&#30830;&#20445;&#24050;&#27491;&#30830;&#37197;&#32622;Elasticsearch&#26381;&#21153;&#24182;&#21551;&#29992;&#20854;&#36335;&#30001;&#21151;&#33021;&#12290;<\/li>\n<li>&#35831;&#35760;&#20303;&#65292;&#36825;&#20010;&#20363;&#23376;&#20551;&#35774;&#20320;&#24050;&#32463;&#25317;&#26377;&#19968;&#20010;&#21517;&#20026;&#8217;site&#8217;&#30340;&#31867;&#21517;&#65292;&#22914;&#26524;&#20320;&#38656;&#35201;&#28155;&#21152;&#26356;&#22810;&#31867;&#21035;&#65292;&#35831;&#30456;&#24212;&#22320;&#20462;&#25913; <code>$page-&gt;category-&gt;name<\/code> &#30340;&#20540;&#12290;<\/li>\n<li>&#22914;&#26524;&#20320;&#30340;&#32593;&#31449;&#26377;&#22823;&#37327;&#25968;&#25454;&#65292;&#25110;&#32773;&#38656;&#35201;&#22788;&#29702;&#22823;&#37327;&#30340;&#35831;&#27714;&#65292;&#21487;&#33021;&#38656;&#35201;&#32771;&#34385;&#20248;&#21270;&#26597;&#35810;&#21644;&#32531;&#23384;&#31574;&#30053;&#12290;<\/li>\n<\/ul>\n<p>&#24076;&#26395;&#36825;&#20123;&#20449;&#24687;&#33021;&#24110;&#21161;&#21040;&#24744;&#65281;&#22914;&#26524;&#24744;&#26377;&#20219;&#20309;&#30097;&#38382;&#25110;&#38656;&#35201;&#36827;&#19968;&#27493;&#30340;&#24110;&#21161;&#65292;&#35831;&#38543;&#26102;&#25552;&#38382;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312;Laravel&#20013;&#21019;&#24314;XML&#31449;&#28857;&#22320;&#22270;&#26159;&#19968;&#20010;&#31616;&#21333;&#30340;&#36807;&#038;#..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-825","my1js","type-my1js","status-publish","hentry","my1js2nav-laravel"],"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\/825","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=825"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=825"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=825"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}