ruthgeridema/laravel-url-rewrites

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

1.1.3 2020-01-10 12:47 UTC

This package is auto-updated.

Last update: 2024-09-10 22:59:58 UTC


README

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

非常容易使用的 URL 重写包。遵循说明,一切顺利!

您可以在我的 Github 上找到一个示例项目:查看示例项目
此示例项目具有以下功能

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

要求

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

安装

您可以通过 composer 安装此包

composer require ruthgeridema/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 了解详细信息。

安全性

如果您发现任何安全问题,请通过电子邮件 ruthger.idema@gmail.com 报告,而不是使用问题跟踪器。

致谢

特别感谢 Spatie 及其指南和包,它们是灵感的来源

许可证

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