sparkouttech/laravel-url-rewrites

在 Laravel 应用中轻松实现 URL 重写

dev-main 2024-03-19 11:37 UTC

This package is auto-updated.

Last update: 2024-09-19 13:05:52 UTC


README

Latest Version on Packagist Software License Build Status Quality Score StyleCI Total Downloads

非常容易使用的 URL 重写包。按照说明操作,一切就绪!

您可以在我的 Github 上找到一个示例项目: 查看示例项目 此示例项目包括以下内容

  • Eloquent 监听器以自动添加 URL 重写
  • 特质的用法
  • 一些用例

需求

此包需要 Laravel 8 或更高版本,PHP 8.1 或更高版本,以及支持 json 字段和函数的数据库,如 MySQL 5.7 或更高版本。

安装

您可以通过 composer 安装此包

composer require sparkouttech/laravel-url-rewrites

包将自动注册自己。

使用 rewrites-宏注册将在其中显示的路线的路线。您需要将其放置在路线文件底部。

// In routes/web.php
Route::rewrites();

您可以使用以下命令发布迁移

php artisan vendor:publish --provider="RuthgerIdema\UrlRewrite\ServiceProvider" --tag="migrations"

在迁移发布后,您可以通过运行迁移来创建 url_rewrites

php artisan migrate

您可以选择使用以下命令发布配置文件

php artisan vendor:publish --provider="RuthgerIdema\UrlRewrite\ServiceProvider" --tag="config"

这是已发布配置文件的内容

<?php

return [
    'table-name' => 'url_rewrites',
    'repository' => \RuthgerIdema\UrlRewrite\Repositories\UrlRewriteRepository::class,
    'model' => \RuthgerIdema\UrlRewrite\Entities\UrlRewrite::class,
    'cache' => true,
    'cache-decorator' => \RuthgerIdema\UrlRewrite\Repositories\Decorators\CachingUrlRewriteRepository::class,
    'types' => [
        'product' => [
            'route' => 'product',
            'attributes' => ['id'],
        ],
        'category' => [
            'route' => 'category',
            'attributes' => ['id'],
        ]
    ],
];

Laravel Nova

使用 Laravel Nova?您可以使用以下命令将 Nova 类发布到 App/Nova

php artisan vendor:publish --provider="RuthgerIdema\UrlRewrite\ServiceProvider" --tag="nova"

在不久的将来,我将发布一个具有如重索引 URL 重写等功能的 Laravel Nova 包。

用法

转发请求

假设您有一个控制器路由 'product/{id}',您有一个产品 'Apple Airpods',ID 为 5。当您访问 'apple-airpods' 时,此包将转发请求到控制器,但保留干净的 URL。

以下代码将此添加到数据库中

UrlRewrite::create('apple-airpods', 'product/5')

使用命名路由

您必须在配置中指定类型。

UrlRewrite::create('apple-airpods', null, 'product', ["id" => 5])

要重新生成目标路径,您可以使用

UrlRewrite::regenerateRoute($urlRewrite)
UrlRewrite::regenerateAll()
UrlRewrite::regenerateRoutesFromType($type)

要自动将 URL 属性添加到 Eloquent 模型,您必须在 Eloquent 模型中添加 HasUrlRewrite 特质。您还需要添加 urlRewriteType 并可选地添加 'url' 到 appends 数组中。

use HasUrlRewrite;
public $urlRewriteType = 'category';
protected $appends = ['url'];

完成此操作后,您可以通过调用 Model::find(1)->url 来获取模型的 URL。

重定向

301 重定向

UrlRewrite::create('apple-airpods', 'product/5', null, null, 1)

302 重定向

UrlRewrite::create('apple-airpods', 'product/5', null, null, 2)

其他功能

UrlRewrite::all()
UrlRewrite::find($id)
UrlRewrite::delete($id)
UrlRewrite::update($data, $id)
UrlRewrite::getByRequestPath('apple-airpods')
UrlRewrite::getByTargetPath('product/5')
UrlRewrite::getByTypeAndAttributes('product', ["id" => 5])

测试

  1. .env.example 复制到 .env 并填写您的数据库凭据。
  2. 运行 composer test

更新日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件