---
title: "Definície slugov — Sluggable for Laravel | Roundly"
description: "Deklarujte ľubovoľný počet slugových stĺpcov cez slugOptions() alebo atribúty #[Slug] — zdroje, formát, jedinečnosť, životný cyklus a routing."
url: https://roundly-consulting.com/sk/open-source/navody/sluggable-for-laravel/definicie-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)

# Definície slugov

Prepíšte slugOptions() a deklarujte jeden alebo viac slugových stĺpcov. Každá SlugDefinition je fluentný builder; každá nenastavená voľba preberie predvolenú hodnotu z konfigurácie:

```php
use RoundlyConsulting\Sluggable\Definitions\SlugDefinition;
use RoundlyConsulting\Sluggable\Definitions\SlugOptions;
use RoundlyConsulting\Sluggable\Enums\UpdatePolicy;

public function slugOptions(): SlugOptions
{
    return SlugOptions::make(
        SlugDefinition::for('slug')
            ->from('name')
            ->uniqueWithin('clinic_id')
            ->onUpdate(UpdatePolicy::WhenSourceChanges)
            ->keepHistory()
            ->routeKey(),
        SlugDefinition::for('handle')
            ->from(['brand.name', 'name'])       // relation dot path + attribute
            ->separator('_')
            ->maxLength(40)
            ->immutable(),
        SlugDefinition::for('code')
            ->from(fn (Product $product, ?string $locale): string => $product->sku)
            ->lowercase(false)
            ->notUnique(),
    );
}
```

Definície sa spracúvajú v poradí deklarácie, takže neskorší stĺpec môže ako zdroj použiť skorší slug. Najviac jedna definícia môže byť routeKey(); duplicitné stĺpce alebo viac route kľúčov vyhodia InvalidSlugDefinitionException.

## Zdroje

from() prijíma názov atribútu, zoznam atribútov, bodkové cesty cez relácie (načítané cez loadMissing(), takže preventLazyLoading() neprotestuje) alebo closure fn (Model $m, ?string $locale): ?string. Skalárne atribúty sa čítajú cez getAttribute(), takže sa uplatnia accessory aj casty a enumy použijú svoju hodnotu. Chýbajúca relácia neprispeje ničím.

## Všetky voľby

| Metóda | Význam |
| --- | --- |
| `for(string $column)` | Stĺpec slugu. |
| `from(string\|list<string>\|Closure)` | Atribút(y), bodkové cesty cez relácie (načítané cez loadMissing) alebo fn (Model $m, ?string $locale): ?string. |
| `sourceLocale(string)` | Ktorý jazyk zdroja s jazykovou mapou napĺňa reťazcový slug (predvolene: záložný → aktuálny → prvý). |
| `separator(string), maxLength(int), maxWords(?int)` | Formátovanie. |
| `language(string\|Closure\|null), dictionary(array), unicode(), lowercase(bool)` | Transliterácia a znaky. |
| `using(Closure $slugger)` | Nahradí kroky formátovania; výstup sa aj tak overí ako bezpečný segment URL. |
| `reserved(list<string>)` | Ďalšie rezervované slová. |
| `prefix(string\|Closure), suffix(string\|Closure)` | Predpona a prípona, ktoré skracovanie nikdy neoreže. |
| `unique(), uniqueWithin(string ...$columns), uniqueWhere(Closure), notUnique()` | Jedinečnosť. |
| `perLocaleUniqueness(), uniqueAcrossLocales()` | Len pre jazykové mapy. |
| `includeTrashed(bool), excludeTrashed()` | Či sa soft-deleted riadky počítajú ako obsadené. |
| `sequentialSuffix(?int $start = null), randomSuffix(?int $length), suffixUsing(SuffixGenerator\|Closure)` | Stratégia pri kolízii; sequentialSuffix() bez zadaného začiatku začína od defaults.suffix\_start. |
| `randomLength(int)` | Dĺžka náhodného slugu / sufixu (4–32). |
| `onCreate(bool), onUpdate(UpdatePolicy), immutable(), regenerateOnUpdate()` | Životný cyklus. |
| `manual(ManualSlugPolicy)` | Ako sa zaobchádza s ručne zadanými hodnotami. |
| `whenEmptySource(EmptySourcePolicy)` | Prázdny zdroj → random / skip / fail. |
| `lockWhen(Closure), locked()` | Zmrazí slug (napr. po publikovaní). |
| `skipWhen(Closure)` | Pri danom uložení stĺpec preskočí. |
| `localized(bool), storage(SlugStorage)` | Vynúti typ úložiska (predvolene sa zistí automaticky). |
| `locales(TargetLocales\|list<string>\|Closure)` | Pre ktoré jazyky sa slugy generujú. |
| `fallback(LocaleFallback), fallbackLocale(string\|Closure\|null)` | Reťazec pre čítanie/binding a jeho záložný jazyk. |
| `routeKey(bool)` | Stĺpec sa stane getRouteKeyName() (najviac jeden). |
| `bindByKeyFallback(bool)` | Po neúspechu podľa slugu skúsi primárny kľúč. |
| `keepHistory(bool), redirectFromHistory(bool), avoidHistoricalSlugs(bool)` | História slugov. |
| `retries(int)` | Opakovania pri súbehu (0 vypne). |

Settery s closure sú generické, takže typované closures ako ->lockWhen(fn (Post $post): bool => $post->is\_published) prejdú vo vašom kóde cez Larastan na úrovni 7.

## Zápis atribútmi

Pre podmnožinu bez closures deklarujte stĺpce ako opakovateľné atribúty triedy #\[Slug\]:

```php
use RoundlyConsulting\Sluggable\Attributes\Slug;

#[Slug('slug', from: 'name', uniqueWithin: ['kind_id'], routeKey: true)]
#[Slug('short', from: ['kind.name', 'name'], maxLength: 40, onUpdate: UpdatePolicy::Never)]
final class Breed extends Model implements Sluggable
{
    use HasSlug;
}
```

Atribút prijíma column, from, separator, maxLength, maxWords, language, unicode, lowercase, uniqueness, uniqueWithin, includeTrashed, localeUniqueness, onUpdate, manual, emptySource, suffix, suffixStart, randomLength, storage, locales, fallback, routeKey, bindByKeyFallback, keepHistory, redirectFromHistory a reserved. SuffixStrategy::Custom sa atribútom vyjadriť nedá. Bez suffixStart začína sekvenčný sufix od defaults.suffix\_start.

## Poradie prednosti

- Prepísaná metóda slugOptions() na modeli — má vždy prednosť.
- Atribúty triedy #\[Slug\] — zdedia sa z rodičovskej triedy, ak potomok žiadne nedeklaruje.
- SlugOptions::defaults() — jedna definícia: defaults.column generovaný z defaults.source.

Súčasná deklarácia atribútov a prepísanie slugOptions() vyhodí v prostrediach local a testing výnimku conflictingSources.

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