什么是小写,用路由 laravel 助手替换字符路由的最佳方法?
What is the best way to lowercase, replace characters route with the route laravel helper?
我想改进路由生成。其实我对自己的解决方案并不满意,也不在最佳实践路径上。
我需要在 blade 中生成一些路由。
- 应该只生成小写 url
- 我会替换一些字母,比如 ä -> ae
- 解析日期
那是什么 "best practice"?
我尝试直接在 blade 文件中进行。
@foreach($foods as $food)
<a href="{{route('food.show', [
'name' => $food->name,
'date' => App\Models\Food::replaceCharacters(Str::lower(Carbon\Carbon::parse($food->urlDate)->isoFormat('DD-MMMM-YYYY')))])}}">
Linkname}}
</a>
@endforeach
Laravel 有一些本地助手可以帮助您实现这个目标。主要是Str::slug
方法。
这是它的源代码:
/**
* Generate a URL friendly "slug" from a given string.
*
* @param string $title
* @param string $separator
* @param string|null $language
* @return string
*/
public static function slug($title, $separator = '-', $language = 'en')
{
$title = $language ? static::ascii($title, $language) : $title;
// Convert all dashes/underscores into separator
$flip = $separator === '-' ? '_' : '-';
$title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);
// Replace @ with the word 'at'
$title = str_replace('@', $separator.'at'.$separator, $title);
// Remove all characters that are not the separator, letters, numbers, or whitespace.
$title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', static::lower($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);
}
此助手足以生成 SEO 友好 URL,但此答案仅针对第一个和第二个要点。对于其余部分,我认为最好的解决方案是在 Food
class.
中使用 Accessor
这样,当您访问 name
属性 或 urlDate
属性 时,您可以收到一个已经格式化的字符串。例如:
use Illuminate\Support\Str;
[...]
public function getNameAttribute($value)
{
// Return the slug for a SEO friendly parameter
return Str::slug($value);
}
示例输入:My äwe$oMe food|name
示例输出:my-aweome-foodname
对于日期,您只应在此代码中添加格式部分。
我想改进路由生成。其实我对自己的解决方案并不满意,也不在最佳实践路径上。
我需要在 blade 中生成一些路由。
- 应该只生成小写 url
- 我会替换一些字母,比如 ä -> ae
- 解析日期
那是什么 "best practice"?
我尝试直接在 blade 文件中进行。
@foreach($foods as $food)
<a href="{{route('food.show', [
'name' => $food->name,
'date' => App\Models\Food::replaceCharacters(Str::lower(Carbon\Carbon::parse($food->urlDate)->isoFormat('DD-MMMM-YYYY')))])}}">
Linkname}}
</a>
@endforeach
Laravel 有一些本地助手可以帮助您实现这个目标。主要是Str::slug
方法。
这是它的源代码:
/**
* Generate a URL friendly "slug" from a given string.
*
* @param string $title
* @param string $separator
* @param string|null $language
* @return string
*/
public static function slug($title, $separator = '-', $language = 'en')
{
$title = $language ? static::ascii($title, $language) : $title;
// Convert all dashes/underscores into separator
$flip = $separator === '-' ? '_' : '-';
$title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);
// Replace @ with the word 'at'
$title = str_replace('@', $separator.'at'.$separator, $title);
// Remove all characters that are not the separator, letters, numbers, or whitespace.
$title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', static::lower($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);
}
此助手足以生成 SEO 友好 URL,但此答案仅针对第一个和第二个要点。对于其余部分,我认为最好的解决方案是在 Food
class.
这样,当您访问 name
属性 或 urlDate
属性 时,您可以收到一个已经格式化的字符串。例如:
use Illuminate\Support\Str;
[...]
public function getNameAttribute($value)
{
// Return the slug for a SEO friendly parameter
return Str::slug($value);
}
示例输入:My äwe$oMe food|name
示例输出:my-aweome-foodname
对于日期,您只应在此代码中添加格式部分。