gpt4 book ai didi

php - 覆盖默认的 str_slug - 可能吗? Laravel-7

转载 作者:行者123 更新时间:2023-12-04 10:10:26 31 4
gpt4 key购买 nike

我们有来自泰米尔纳德邦的用户,看起来 Laravel 的默认 Str::slug() 无法处理像这样的字符:தமிழ்。它只是返回一个空字符串。这会导致用户个人资料页面出现 404。

我想知道如何在不影响其余网址的情况下解决此问题。我认为解决此问题的一种方法是覆盖默认的 Str::slug() 函数并检查原始函数是否返回空字符串。如果是这样,我可以将第一个字段注释为 $title = static::ascii($title)。然后它的作品。但我不想打扰默认的 Str::slug() 方法。同时不知道如何覆盖它。

默认 Str::slug():

public static function slug($title, $separator = '-')
{
//$title = static::ascii($title);

// Convert all dashes/underscores into separator
$flip = $separator == '-' ? '_' : '-';
$title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);

// Remove all characters that are not the separator, letters, numbers, or whitespace.
$title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', mb_strtolower($title));

// Replace all separator characters and whitespace by a single separator
$title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);

return trim($title, $separator);
}

您如何在您的应用中处理此问题?感谢您的提前..

最佳答案

一切皆有可能,但我不建议重写 Laravel 助手。

方便的是,Str 类使用 Laravel macroable 特性,让我们可以轻松扩展它。

我建议编写您自己的 Str::superSlug() 方法来处理泰米尔语中的 slug。

为此,您可以将自定义宏添加到 AppServiceProviderboot() 方法中:

public function boot()
{
Str::macro('superSlug', function ($title) {
$slugified = Str::slug($title);

if ($slugified) {
return $slugified;
} else {
// Your code to handle TamilNadu slugs
}
});
}

就是这样!您现在可以在代码中的任何位置调用 Str::superSlug(); 方法。

这里有一段很棒的视频,详细解释了这个概念:

关于php - 覆盖默认的 str_slug - 可能吗? Laravel-7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61354596/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com