---
title: "Úpravy, ručné hodnoty a zámky — Sluggable for Laravel | Roundly"
description: "Určte, kedy sa slugy regenerujú, ako sa zaobchádza s ručne zadanými hodnotami, čo sa stane pri prázdnom zdroji a ako slug zmraziť."
url: https://roundly-consulting.com/sk/open-source/navody/sluggable-for-laravel/zivotny-cyklus
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)

# Úpravy, ručné hodnoty a zámky

Každá definícia určuje, čo sa stane pri vytvorení, pri úprave a keď používateľ zadá vlastný slug:

| Situácia | Správanie |
| --- | --- |
| Vytvorenie, prázdna hodnota | Vygeneruje sa zo zdrojov; pri prázdnom zdroji rozhoduje EmptySourcePolicy (predvolene Random). |
| Ručná hodnota (vytvorenie alebo zmena) | Normalize (predvolené): hodnota prejde pipeline a stane sa jedinečnou — ak z nej po normalizácii nič nezostane, považuje sa za prázdnu (vygeneruje sa alebo vymaže). Verbatim: bajty sa zachovajú, hodnota sa urobí jedinečnou (skráti sa na maxLength ako vygenerovaná). Strict: bajty sa zachovajú; ak je hodnota obsadená, vyhodí sa SlugAlreadyTakenException, a ak je dlhšia ako maxLength, SlugGenerationException (tooLong) — taký slug by sa nikdy nenaviazal. |
| Úprava, Never | Nič, ani pri prázdnej hodnote. |
| Úprava, IfEmpty (predvolené) | Doplní prázdnu hodnotu alebo chýbajúce jazyky; existujúce hodnoty nikdy nemení. |
| Úprava, WhenSourceChanges | Prepočíta sa pri zmene zdrojového atribútu (pri jazykových mapách po jazykoch). |
| Úprava, Always | Prepočíta sa pri každej úprave. |
| lockWhen() vráti true / locked() | Žiadna automatická zmena; ručná zmena vyhodí SlugLockedException (obídenie: Slugs::unlocked(fn () => …)). |
| Zmena stĺpca rozsahu / obnovenie s excludeTrashed() | Znovu overí jedinečnosť; nový sufix doplní od základu zo zdroja (chair-2 presunutý tam, kde je chair voľný, sa zmení na chair, nie na chair-2-2) — pri Strict vyhodí výnimku. |

Prepočítaný slug nahradí aktuálny, len ak sa zmenil jeho základ: z chair-2 sa nikdy zbytočne nestane chair-3. Základ určujú uložené zdroje, nie tvar slugu — premenovanie Room 101 na Room dá room (alebo room-2), nikdy zastaraný room-101. Explicitný prepočet (recompute(), regenerateSlugs(), --mode=stale) navyše odstráni sufix, ak je holý základ opäť voľný. Hodnoty Verbatim a Strict s medzerami, riadiacimi znakmi, /, ?, # alebo % a bodkové segmenty . a .. sa odmietnu.

## Nastavenie pravidiel

```php
use RoundlyConsulting\Sluggable\Enums\EmptySourcePolicy;
use RoundlyConsulting\Sluggable\Enums\ManualSlugPolicy;
use RoundlyConsulting\Sluggable\Enums\UpdatePolicy;

SlugDefinition::for('slug')
    ->from('title')
    ->onUpdate(UpdatePolicy::WhenSourceChanges)       // or ->regenerateOnUpdate()
    ->manual(ManualSlugPolicy::Strict)                // taken values throw SlugAlreadyTakenException
    ->whenEmptySource(EmptySourcePolicy::Fail)        // or Random (default) / Skip
    ->lockWhen(fn (Post $post): bool => $post->is_published)
    ->skipWhen(fn (Post $post): bool => $post->is_imported);

SlugDefinition::for('handle')->from('name')->immutable();   // = onUpdate(UpdatePolicy::Never)
SlugDefinition::for('code')->from('sku')->locked();         // never changes automatically
```

- onUpdate() — UpdatePolicy::Never, IfEmpty (predvolené), WhenSourceChanges alebo Always. immutable() je skratka pre Never, regenerateOnUpdate() pre WhenSourceChanges.
- WhenSourceChanges pri jazykových mapách prepočítava po jazykoch; zdroje cez closure a cesty cez relácie sa vždy považujú za zmenené.
- manual() — ManualSlugPolicy::Normalize (predvolené), Verbatim alebo Strict.
- whenEmptySource() — EmptySourcePolicy::Random (predvolené: náhodný slug s dĺžkou randomLength znakov), Skip alebo Fail (SlugGenerationException).
- lockWhen() / locked() slug zmrazia; skipWhen() preskočí stĺpec pri jednom uložení; onCreate(false) vypne generovanie pri vytvorení.

## Pozastavenie, vynútenie a obídenie

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

Slugs::withoutGeneration(fn () => Product::factory()->count(500)->create());  // imports
Product::withoutSlugGeneration(fn () => /* … */ null);
Slugs::unlocked(fn () => $post->update(['slug' => 'fixed-typo']));            // bypass locks

Slugs::recompute($product, columns: ['slug']);                               // recompute from the sources; you save
$product->regenerateSlugs(columns: ['slug'])->save();                        // the same from the model side
Slugs::regenerate($product, columns: ['slug']);                              // recompute + save
Slugs::apply($product);                                                      // run the save-time pass now (before saveQuietly/imports)
Slugs::model(Product::class)->regenerate(mode: RegenerationMode::Missing);   // back-fill a whole class
```

withoutGeneration() vypne hooky — a s nimi aj eventy a históriu; dá sa vnárať a je bezpečné pri výnimke. Hooky bežia v creating/updating, takže insert()/upsert() cez query builder, saveQuietly() a withoutEvents() negenerujú nič: najprv zavolajte Slugs::apply($model). Ani save() bez zmien slug nedoplní, pretože Laravel spúšťa updating len pri zmenených modeloch — použite regenerateSlugs(), Slugs::model(X::class)->regenerate() alebo sluggable:regenerate --mode=missing.

## 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)
