Všetky balíky
Sluggable for Laravel
Prechod a obmedzenia
S predvolenými nastaveniami sa každý vygenerovaný slug pri bežnom vstupe do 255 znakov zhoduje so Str::slug(), takže prechod existujúceho modelu zachová jeho URL. Bežné voľby sa prevedú takto:
| Bežná voľba inde | Sluggable |
|---|---|
| Generovanie z name do slug | Zero config, or #[Slug('slug', from: 'name')] |
| Regenerovanie pri úprave | ->onUpdate(UpdatePolicy::WhenSourceChanges) (or keep IfEmpty + ->keepHistory()) |
| Sufix začína na -1 | ->sequentialSuffix(start: 1) |
| Globálna jedinečnosť oproti indexu s rozsahom v DB | ->uniqueWithin('clinic_id') |
| Ručný getRouteKeyName() | ->routeKey() |
| „Neregenerovať pri úprave“ / „zabrániť prepísaniu“ | ->immutable() / ManualSlugPolicy |
Pred zapnutím unikátneho indexu spustite php artisan sluggable:duplicates a potom sluggable:regenerate --mode=missing na doplnenie prázdnych slugov.
Kombinácia s inými traitmi
- HasSlug prepisuje performInsert, performUpdate, getRouteKeyName, getRouteKey, resolveRouteBindingQuery, resolveRouteBinding, resolveSoftDeletableRouteBinding a resolveChildRouteBinding — trait, ktorý prepisuje tie isté metódy, vyžaduje insteadof.
- Metóda deklarovaná priamo v triede modelu má potichu prednosť pred traitom.
- Pomocné metódy majú prefix sluggable… a HasSlug nedeklaruje currentLocale, fallbackLocale, readMap, writeMap, getTranslation(s) ani setTranslation(s), takže sa kombinuje s bežnými prekladovými traitmi bez insteadof.
- Hooky bežia v creating/updating (nie v saving), po listeneroch traitov deklarovaných skôr — trait, ktorý nastavuje stĺpec rozsahu (napr. id tenanta), deklarujte pred HasSlug.
Obmedzenia
- insert()/upsert() cez query builder, saveQuietly() a withoutEvents() nespúšťajú eventy modelu, a preto nič negenerujú — najprv zavolajte Slugs::apply($model).
- save() bez zmien slug nedoplní (Laravel spúšťa updating len pri zmenených modeloch) — použite regenerateSlugs(), Slugs::model(X::class)->regenerate() alebo sluggable:regenerate --mode=missing.
- Opakovanie po súbehu znovu spustí creating/updating aj pre vaše listenery; pri modeloch s neidempotentnými listenermi použite retries(0).
- Jedinečnosť naprieč jazykmi a s closure rozsahom zabezpečuje len aplikácia.
- Jeden key_type histórie na aplikáciu.
- Presmerovania pri prepnutí jazyka a pomocníci pre sitemapy nie sú súčasťou balíka — na vlastné riešenie počúvajte SlugChanged.
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 kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
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.