如何在 Laravel 9 中生成站点地图 XML 文件?

本文重点介绍 laravel 9 生成站点地图。
我简单解释了 laravel 9 生成站点地图自定义。
我逐步解释了如何在 laravel 9 中创建动态 xml 站点地图。
我将向您展示有关 laravel 9 站点地图 xml 的信息。

基本上,理想情况下,站点地图是以 .xml 扩展名结尾的文件;它是一个简单的文件,其中包含重要的网站页面,并允许网站管理员通知搜索引擎哪些页面可供抓取。

无论您使用什么技术,此站点地图文件不仅限于 laravel,而且确保您必须生成并添加站点地图 xml 文件以通知搜索引擎。

让我们开始下面的例子:
第 1 步:安装 Laravel

首先,我们将从头开始新的 laravel 应用程序。如果您已经创建了项目,则跳过以下步骤。

composer create-project laravel/laravel example-app

第 2 步:创建迁移后和模型

在第二步中,我们需要通过以下命令创建一个新的迁移后模型:

php artisan make:migration create_posts_table

database/migrations/create_posts_table.php

<?php
  
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
  
return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('slug');
            $table->text('body');
            $table->timestamps();
        });
    }
  
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
};

现在按照以下命令运行迁移:

php artisan migrate

现在,运行以下命令来创建 Post 模型。

php artisan make:model Post

因此,然后将以下代码更新为 Post 模型。app/Models/Post.php

<?php
  
namespace App\Models;
  
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
  
class Post extends Model
{
    use HasFactory;
  
    protected $fillable = [
        'title', 'slug', 'body'
    ];
}

第 3 步:创建后期工厂

然后,我们将创建 Post 工厂类并使用 tinker 命令生成虚拟记录。所以让我们运行下面的命令来创建后期工厂。

php artisan make:factory PostFactory

database/factories/PostFactory.php

<?php
  
namespace Database\Factories;
  
use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\Post;
use Illuminate\Support\Str;
  
/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Post>
 */
class PostFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Post::class;
    /**
     * Define the model's default state.
     *
     * @return array

     */
    public function definition()
    {
        return [
            'title' => $this->faker->text(),
            'slug' => Str::slug($this->faker->text()),
            'body' => $this->faker->paragraph()
        ];
    }
}

然后只需运行 tinker 命令并创建虚拟帖子。

php artisan tinker
    
App\Models\Post::factory()->count(30)->create();

第 4 步:创建路线
routes/web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\SitemapController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('sitemap.xml', [SitemapController::class, 'index']);

第 5 步:创建新控制器

在第二步中,我们需要创建一个新的 SitemapController;在这个文件中,我们将为渲染视图和存储图像逻辑添加两个方法 index() 和 store()。

让我们通过以下命令创建 SitemapController:

php artisan make:controller SitemapController

app/Http/Controllers/SitemapController.php

<?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\Models\Post;
  
class SitemapController extends Controller
{
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function index($value='')
    {
        $posts = Post::latest()->get();
  
        return response()->view('sitemap', [
            'posts' => $posts
        ])->header('Content-Type', 'text/xml');
    }
}

第 6 步:创建Blade文件

在最后一节中,我们需要使用 sitemap.blade.php 来显示所有帖子并输入以下代码:resources/views/sitemap.blade.php

<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    @foreach ($posts as $post)
        <url>
            <loc>{{ url('/') }}/post/{{ $post->slug }}</loc>
            <lastmod>{{ $post->created_at->tz('UTC')->toAtomString() }}</lastmod>
            <changefreq>daily</changefreq>
            <priority>0.8</priority>
        </url>
    @endforeach
</urlset>

运行 Laravel 应用程序:

所有步骤都已完成,现在您必须输入给定的命令并按回车键来运行 laravel 应用程序:

php artisan serve

现在,转到您的网络浏览器,输入给定的 URL 并查看应用程序输出:

http://localhost:8000/sitemap.xml

输出 :

我希望它可以帮助你…