NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Advertisements for Laravel

Slugy a routovanie

Slugy generuje sluggable-for-laravel. Reklamy majú mapu slugov podľa jazykov, vytvorenú z názvu v každom jazyku:

  • Pri vytvorení dostane slug každý jazyk, ktorý má vyplnený name, a každý sa prepíše podľa pravidiel svojho jazyka (Red Chair / Červená stolička → red-chair / cervena-stolicka).
  • Pri úprave sa pregenerujú len jazyky, ktorých názov sa zmenil; premenovanie so zachovaným základom nikdy nezmení chair-2 na chair-3.
  • Kolízie sa riešia v rámci jazyka číselným sufixom od -2 (vintage-road-bike, vintage-road-bike-2, …); soft-deleted reklamy si slug ponechávajú rezervovaný. Rôzne jazyky môžu mať rovnaký slug. Prázdny name nevygeneruje nič.
  • Unikátny index pre každý jazyk to vynucuje aj v databáze; súbežný zápis, ktorý prehrá, dostane nový sufix a zopakuje sa.

Route binding

Reklamy sa viažu podľa slugu: najprv v aktívnom jazyku, potom vo fallback_locale a nakoniec v ktoromkoľvek inom podporovanom jazyku — odkaz zdieľaný v inom jazyku teda stále funguje. URL sa generujú zo slugu v aktuálnom jazyku:

use Illuminate\Support\Facades\Route;
use RoundlyConsulting\Advertisements\Models\Advertisement;

// routes/web.php
Route::get('/ads/{advertisement}', fn (Advertisement $advertisement) => $advertisement)->name('ads.show');
// GET /ads/vintage-road-bike resolves the ad whose slug matches, preferring the current locale.

route('ads.show', $ad);                                   // current-locale slug
Advertisement::query()->whereSlug('vintage-road-bike')->first();
Advertisement::query()->whereSlug('stary-bicykel', locale: 'sk')->first();
$ad->slugFor('sk');                                       // exact locale, no fallback

História slugov

Pri zapnutom slugs.history (a publikovanej migrácii balíka sluggable) sa každý starý slug zapamätá a požiadavka GET naň odpovie presmerovaním 301 na aktuálnu URL vrátane query stringu. Natrvalo zmazaná alebo prerezaná reklama si záznamy histórie vezme so sebou; soft-deleted reklama si ich (aj rezervovaný slug) ponechá pre obnovenie.

Kľúče umiestnení a kategórií

Umiestnenia a kategórie majú jediný reťazcový slug — kľúč pre kód, napríklad „sidebar“. Ak ho nevyplníte, vygeneruje sa z názvu vo fallback_locale (Side Banner → side-banner, pri obsadení so sufixom -2). Zadaný slug sa zachová bajt po bajte a obsadený vyhodí SlugAlreadyTakenException namiesto tichého pridania sufixu. Po nastavení sa už nikdy nezmení.

Validácia

Vstup z administrácie validujte pravidlami balíka sluggable, ktoré uplatňujú presne tieto pravidlá:

use RoundlyConsulting\Advertisements\Models\Advertisement;
use RoundlyConsulting\Advertisements\Models\Placement;
use RoundlyConsulting\Sluggable\Rules\UniqueSlug;
use RoundlyConsulting\Sluggable\Rules\ValidSlug;

'slug' => ['nullable', 'string', ValidSlug::for(Placement::class), UniqueSlug::for(Placement::class)->ignore($placement)],
'slug' => ['nullable', 'array', UniqueSlug::for(Advertisement::class)->ignore($ad)],   // errors on slug.{locale}

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.