编程

Laravel 中的自动修复 URL

482 2023-12-24 01:35:00

Laravel 生态中有两个自动修复 URL 的包:

这包有一个相似的目标:你可以随意更改你的模型的路由slug,或者只部分匹配 URL,当 slug 修改时,你永远不必担心 SEO 索引。这两个包都通过向模型添加特性来工作(本例取自 Luke 的包),该包通过路由模型绑定来识别模型:

use Lukeraymonddowning\SelfHealingUrls\Concerns\HasSelfHealingUrls;
 
class Post extends Model
{
    use HasSelfHealingUrls;
 
    // Optional custom model property (default is `slug`)
    protected $slug = 'title';
}

注意:两个包的实现方式不同,请参考响应的 README 文件。

Luke 的包还能够自定义 slug 与模型标识符的连接方式;您可以创建自定义的 IdentifierHandler实现。在撰写本文时,该包附带一个HyphenIdentifierHandler,看起来如下所示:

namespace Lukeraymonddowning\SelfHealingUrls\IdentifierHandlers;
 
use Illuminate\Support\Str;
use Lukeraymonddowning\SelfHealingUrls\Contracts\IdentifierHandler;
 
class HyphenIdentifierHandler implements IdentifierHandler
{
    public function joinToSlug(string $slug, string|int $identifier): string
    {
        return "{$slug}-{$identifier}";
    }
 
    public function separateFromSlug(string $value): string
    {
        return Str::afterLast($value, '-');
    }
}

如果您希望使用不同于 slug 的标识符和由连字符(-)分隔的唯一标识符,则可以实现此接口以提供自定义的 handler。