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

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