Fasáda Slugs
Fasáda Slugs je jediný vstupný bod pre všetko, čo nie je hook modelu: ploché volania pre text a jeden model a Slugs::model(Product::class) — názov triedy alebo jej morph alias — na doplnenie slugov v celej triede, audit, indexy a vyhľadávanie v histórii:
use RoundlyConsulting\Sluggable\Enums\RegenerationMode;
use RoundlyConsulting\Sluggable\Facades\Slugs;
// Text and one model
Slugs::slugify('Žltý kôň @ home', language: 'sk'); // 'zlty-kon-at-home'
Slugs::generate($product, column: 'slug'); // the value it would get; sets nothing
Slugs::apply($product); // run the save-time pass now (before saveQuietly/imports)
Slugs::recompute($product, columns: ['slug']); // recompute from the sources; you save
Slugs::regenerate($product, columns: ['slug']); // recompute + save
Slugs::withoutGeneration(fn () => $importer->run()); // nestable, exception-safe toggles
Slugs::unlocked(fn () => $product->update(['slug' => 'new']));
Slugs::locales(); // SlugLocales
// A whole model class (a class name or its morph alias)
$products = Slugs::model(Product::class);
$products->regenerate(mode: RegenerationMode::Stale, dryRun: true); // RegenerationReport
$products->regenerate(mode: RegenerationMode::Missing, withHistory: true, columns: ['slug']);
$products->queueRegeneration(mode: RegenerationMode::All, chunk: 1000); // jobs dispatched (int)
$products->duplicates(column: 'slug', locale: 'sk'); // list<SlugDuplicate> a unique index would reject
$products->indexes(dryRun: true); // SlugIndexReport: the DDL, nothing executed
$products->indexes(); // create the missing engine-native indexes
$products->findInHistory('old-name', locale: 'sk'); // the row that retired a slug, or null
$products->options(); // ResolvedSlugOptionsPloché metódy
| Metóda | Účel |
|---|---|
slugify(string $text, ?string $language = null, ?string $separator = null): string | Pipeline s nakonfigurovanými predvolenými hodnotami. |
generate(Model $model, ?string $column = null, ?string $locale = null): string | Jedinečná hodnota, ktorú by model dostal; nič nenastaví. |
apply(Model $model, ?array $columns = null, ?array $locales = null): SlugGenerationResult | Spustí generovanie ako pri uložení hneď (pred saveQuietly() alebo importom). |
recompute(Model $model, ?array $columns = null, ?array $locales = null): SlugGenerationResult | Prepočíta hodnoty zo zdrojov na inštancii; uloženie je na vás. |
regenerate(Model $model, ?array $columns = null, ?array $locales = null): Model | recompute() + save(). |
model(string $model): ModelSlugs | Práca s celou triedou pre názov triedy alebo morph alias (nižšie). |
withoutGeneration(Closure $callback): mixed | Vypne hooky (vnoriteľné, bezpečné pri výnimke). |
unlocked(Closure $callback): mixed | Obíde zámky. |
isGenerationEnabled(): bool, isUnlocked(): bool | Stav prepínačov. |
locales(): SlugLocales | Naviazaný zdroj jazykov. |
Celá trieda: Slugs::model()
| Metóda | Účel |
|---|---|
regenerate(mode, dryRun, withHistory, columns, locales, chunk, withoutEvents, force): RegenerationReport | Doplní alebo prepočíta celú triedu — rovnaké voľby ako sluggable:regenerate. |
queueRegeneration(mode, withHistory, columns, locales, chunk, withoutEvents, force): int | Odošle jeden RegenerateSlugsJob na chunk; vráti počet jobov. |
duplicates(?string $column = null, ?string $locale = null): array | list<SlugDuplicate>, ktoré by unikátny index odmietol. |
indexes(bool $dryRun = false, ?array $columns = null): SlugIndexReport | Vytvorí chýbajúce natívne indexy, alebo ich len naplánuje. |
findInHistory(string $slug, ?string $column = null, ?string $locale = null, Builder|Relation|null $within = null): ?Model | Záznam, ktorý slug vyradil — cez predvolený alebo zadaný dopyt. |
options(): ResolvedSlugOptions | Vyhodnotené definície. |
- regenerate() a queueRegeneration() prechádzajú riadky bez globálnych scopes; každý zmenený riadok sa uloží bežným spôsobom, takže platí história aj eventy. mode prijíma RegenerationMode — Missing (predvolené), Stale alebo All.
- findInHistory() hľadá cez predvolený dopyt modelu (s globálnymi scopes) alebo cez dopyt, ktorý odovzdáte ako within — vyradený slug nikdy neodhalí riadok, ktorý by tento dopyt nevrátil.
- Každý Artisan príkaz je to isté volanie: sluggable:regenerate, :indexes a :duplicates spúšťajú model()->regenerate() / queueRegeneration(), indexes() a duplicates().
Prepínače sú počítadlá hĺbky uvoľňované v blokoch finally — dajú sa vnárať, sú bezpečné pri výnimke a medzi požiadavkami v Octane nikdy nezostanú nastavené. Na modeli je $model->regenerateSlugs() to isté ako Slugs::recompute($model): prepočíta hodnoty na inštancii a uloženie nechá na vás; Slugs::regenerate() urobí oboje.
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.