NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
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 indeSluggable
Generovanie z name do slugZero 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 kryptomien

Odoslaní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.