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.
  • Model načítaný bez slugového stĺpca (select('id'), select(['id', 'name'])) si ponechá uložený slug: save(), touch(), restore(), regenerateSlugs() ani Slugs::apply() tento stĺpec nezmenia — ani pri regenerateOnUpdate() — a nečítajú ho, takže preventAccessingMissingAttributes() neprotestuje. Ak chcete slug vygenerovať, stĺpec načítajte (alebo zavolajte refresh()).
  • Opakovanie po súbehu znovu spustí creating/updating aj pre vaše listenery; pri modeloch s neidempotentnými listenermi použite retries(0).
  • createOrFirst() s kľúčom na slugu existujúci riadok podľa slugu nenájde (ani firstOrCreate() pri súbehu; bez súbehu firstOrCreate() najprv vyhľadáva, takže riadok nájde): pri Normalize/Verbatim sa vloží nový riadok so sufixom (php-2), pri Strict sa vyhodí SlugAlreadyTakenException, ktorú createOrFirst() nezachytí. Takéto volania postavte na inom unikátnom stĺpci alebo výnimku zachyťte.
  • 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.