Laravel 中的自动修复 URL
Laravel 生态中有两个自动修复 URL 的包:
- Luke Downing 的包: self-healing-urls
- Chris Page 的包: laravel-self-healing-urls
这包有一个相似的目标:你可以随意更改你的模型的路由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。