В 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);
}
Этого помощника достаточно для создания URL-адреса, дружественного к SEO, но только для этого ответадо первой и второй точки пули. В остальном я думаю, что лучшим решением будет использование Accessor в вашем Food
классе.
Таким образом, когда вы получаете доступ к свойству 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
Для даты необходимо добавить только к этому коду форматированиечасть.