Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pplrPmGdSSl 156 of 252 menu
◀ ▶

Генерация slug в сидере Laravel

Поле slug часто попадает в URL: вместо /posts/15 адрес выглядит как /posts/my-article. В slug допустимы латиница, цифры и дефисы - без пробелов и спецсимволов. Случайная строка из random для этого не подходит: в адресе не разобрать запись, а при отладке непонятно, какой пост открыт.

Класс Str умеет собирать slug из обычного текста - метод slug. Пробелы заменяются дефисами, кириллица переводится в латиницу:

<?php echo Str::slug('Hello World'); echo Str::slug('Привет мир'); ?>

В сидере slug обычно берут из заголовка поста - тогда URL совпадает со смыслом записи. Вставим пост с таким slug:

<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; class DatabaseSeeder extends Seeder { public function run(): void { DB::table('posts')->insert([ 'title' => 'Test post', 'slug' => Str::slug('Test post'), 'text' => Str::random(50), ]); } } ?>

Для тестовых данных заголовок можно не придумывать: склеить префикс и случайную часть, как в уроке про конкатенацию, и прогнать результат через slug:

<?php echo Str::slug('post-' . Str::random(6)); ?>

Получится адрес вида post-a1b2c3 - читаемый префикс и уникальный хвост.

Выполним команду на вставку:

php artisan db:seed

Сделайте сидер, который добавит в базу пост с человекочитаемым slug.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить