Laravel: Автоматическое создание уникальных URL адресов
В этой короткой заметке я расскажу как быстро и просто создавать уникальные тринслетирированные URL'ы в ваших проектах на Laravel.
Инструкция актуальна для Laravel 5.5 / 5.6 и выше. Для версий ниже прийдётся подключать сервис провайдер и алиас вручную.
В нашем туториале мы будем использовать библиотеку spatie/laravel-sluggable. Как работает данная библиотека? Добавляем метод use в вашу модель, при сохранении модели бибилиотеке скармливается параметр откуда берём имя, и в какую ячейку пишем url, затем она пробегается по вашей базе, и если там уде есть запись с идентичным урлом к патерну добавляеться -1 / -2 итд.
Итак для начала установим библиотеку генерации URL'ов:
composer require spatie/laravel-sluggable
Далее идём в вашу модель для которой мы будем генерировать url (например Post) и добавляем классы библиотеки:
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
Затем добавляем вызов в модели:
use HasSlug;
и наконец прописываем параметры:
public function getSlugOptions() : SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom('title') // Откуда берём имя урла
->saveSlugsTo('url'); // в какое поле записываем
}
Всё вместе будет выглядеть вот так:
<?php
namespace App;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasSlug;
/**
* Параметры генерации URL.
*/
public function getSlugOptions() : SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom('title')
->saveSlugsTo('url');
}
}
Хотите больше гибкости? Не проблема!
public function getSlugOptions() : SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['first_name', 'last_name'])
->saveSlugsTo('slug');
}
Ну я надеюсь вы поняли трюк =)