Slugy podľa jazyka
Slugy spravuje balík sluggable-for-laravel, ktorý sa inštaluje spolu s týmto balíkom. Prekladateľný model získa slugy pre každý jazyk vďaka dvom traitom a dvom rozhraniam — bez castu a bez ďalšieho prepájania:
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Sluggable\Concerns\HasSlug;
use RoundlyConsulting\Sluggable\Contracts\Sluggable;
use RoundlyConsulting\Sluggable\Definitions\SlugDefinition;
use RoundlyConsulting\Sluggable\Definitions\SlugOptions;
use RoundlyConsulting\Translatable\Concerns\HasTranslations;
use RoundlyConsulting\Translatable\Contracts\Translatable;
final class Topic extends Model implements Translatable, Sluggable
{
use HasTranslations;
use HasSlug;
/** @var list<string> */
public array $translatable = ['name', 'description', 'slug'];
public function slugOptions(): SlugOptions
{
return SlugOptions::make(
SlugDefinition::for('slug')->from('name')->routeKey(),
);
}
/** @return list<string> */
protected function translationStatusExcludes(): array
{
return ['slug'];
}
}
$topic = Topic::create(['name' => ['en' => 'Investing', 'sk' => 'Investovanie']]);
$topic->getTranslations('slug'); // ['en' => 'investing', 'sk' => 'investovanie']Ako to do seba zapadá
- Translatable rozširuje ProvidesLocaleMaps zo sluggable a HasTranslations ho implementuje: isLocaleMapAttribute() → isTranslatableAttribute(), getLocaleMap() → getTranslations(), setLocaleMap() → setTranslations().
- Sluggable preto rozpozná atribút slug ako mapu jazykov a slovenský slug vytvorí zo slovenského názvu bez ohľadu na jazyk requestu.
- Každý slug, ktorý zapíše, prejde overením kľúčov jazykov aj strict_locales z translatable.
- Model musí implementovať Translatable. Model s HasTranslations bez tohto rozhrania nemá na slugu cast, preto ho sluggable odmietne výnimkou InvalidSlugDefinitionException (localeMapContractMissing) namiesto toho, aby stĺpec jsonb považoval za obyčajný reťazec.
- Slugy sa generujú presne pre podporované jazyky cez väzbu TranslatableSlugLocales (pozrite Konfigurácia).
Unikátnosť, natívne unikátne indexy (SlugIndexes, php artisan sluggable:indexes), dopyty (whereSlug, whereSlugInAnyLocale, findBySlug), route binding, validačné pravidlo UniqueSlug, história slugov aj presmerovania patria balíku sluggable — pozrite jeho dokumentáciu.
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.