---
title: "História slugov a presmerovania — Sluggable for Laravel | Roundly"
description: "Uchovajte vyradené slugy a presmerujte staré URL cez 301 na aktuálne — bez odhalenia konceptov, zmazaných záznamov či údajov iných tenantov."
url: https://roundly-consulting.com/sk/open-source/navody/sluggable-for-laravel/historia-slugov
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Sluggable for Laravel](https://roundly-consulting.com/sk/open-source/navody/sluggable-for-laravel.md)

# História slugov a presmerovania

Zapnite históriu pre definíciu (alebo globálne cez history.enabled), potom publikujte a spustite migráciu histórie:

```php
SlugDefinition::for('slug')->from('name')->regenerateOnUpdate()->keepHistory()->routeKey();
```

```bash
php artisan vendor:publish --tag="sluggable-migrations"
php artisan migrate
```

## Ako fungujú presmerovania

- Každá uložená zmena presunie predchádzajúcu hodnotu do slug\_history. Ak si model vezme späť niektorý zo svojich starých slugov, daný záznam sa odstráni.
- Požiadavka GET alebo HEAD s vyradeným slugom vráti 301 (history.redirect\_status) na tú istú routu s aktuálnym slugom a zachová query string. Ostatné metódy dostanú 404.
- Cieľ sa vyhľadá cez vlastný dopyt routy — globálne scopes, rodič vnoreného bindingu, zaobchádzanie so zmazanými záznamami — takže koncepty, záznamy iných tenantov ani zmazané riadky sa nikdy neodhalia.
- Zo vstupu pochádza len zhodný segment routy, takže otvorené presmerovanie nie je možné. SlugMovedException implementuje ShouldntReport; do vášho chybového logu sa nikdy nedostane.
- redirectFromHistory(false) históriu uchová bez presmerovania; avoidHistoricalSlugs() zabráni iným modelom prevziať vyradený slug — pri definícii s rozsahom (uniqueWithin() / uniqueWhere()) len slugy vyradené v tom istom rozsahu, keďže presmerovania nikdy neprechádzajú medzi rozsahmi.

## Vyhľadávanie

Slugs::model() nájde vyradený slug cez predvolený dopyt modelu (s globálnymi scopes) alebo cez dopyt, ktorý odovzdáte ako within:

```php
use RoundlyConsulting\Sluggable\Facades\Slugs;

Slugs::model(Product::class)->findInHistory('old-name', column: 'slug', locale: 'sk');   // ?Model

// Resolve only within a query you trust — a retired slug never reveals a row it would not return
Slugs::model(Product::class)->findInHistory('old-name', within: Product::query()->where('shop_id', $shop->id));
```

## Upratovanie a premazávanie

Záznamy histórie sa odstránia pri skutočnom zmazaní modelu (bez SoftDeletes alebo pri force delete); soft delete ich ponechá. Hromadné mazanie, ktoré nespúšťa eventy modelu, zanechá neškodné osirotené riadky — premazávanie ich časom odstráni. Nastavte history.prune\_after\_days a naplánujte Laravel príkaz model:prune pre model histórie (alebo váš nakonfigurovaný history.model):

```php
// routes/console.php, with sluggable.history.prune_after_days set
Schedule::command('model:prune', ['--model' => [\RoundlyConsulting\Sluggable\Models\SlugHistory::class]]);
```

## Obmedzenia

- Stĺpec morph id histórie sa riadi sluggable.key\_type (bigint, uuid alebo ulid); model, ktorého typ kľúča nezodpovedá, sa odmietne už pri definícii (historyKeyTypeMismatch). Jeden typ kľúča na aplikáciu.
- História ukladá slugy do 255 znakov; definícia s históriou a väčším maxLength sa odmietne už pri definícii.
- Model histórie je vymeniteľný cez history.model — vaša trieda musí rozširovať SlugHistory.
- Ak tabuľka histórie chýba, v prostrediach local a testing sa vyhodí historyTableMissing; inde sa zaloguje varovanie a záznam sa preskočí — nikdy nevznikne chyba 500 po uložení riadku.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/sluggable-for-laravel.md)
