Route model binding
Route::get('/topics/{topic}', ShowTopic::class); // routeKey() column
Route::get('/posts/{post:seo_slug}', ShowPost::class); // any slug column
Route::get('/clinics/{clinic}/products/{product:slug}', ShowProduct::class)->scopeBindings();
Route::get('/archive/{topic}', ShowArchived::class)->withTrashed();
route('topics.show', $topic); // current-locale slug- routeKey() urobí zo stĺpca getRouteKeyName(); pri jazykovej mape je getRouteKey() slug v aktuálnom jazyku, takže generovanie URL závisí od jazyka — generovanie URL vo fronte by malo bežať v zamýšľanom jazyku.
- Binding nasleduje reťazec definície (predvolene LocaleFallback::Any, takže URL v ktoromkoľvek vyhľadateľnom jazyku sa aj tak vyhodnotí) a uprednostní aktuálny jazyk.
- Pokryté sú vnorené bindingy (->scopeBindings(), HasMany aj BelongsToMany) a routy s ->withTrashed().
- Hodnoty, ktoré nie sú reťazcom, sú príliš dlhé alebo obsahujú riadiace znaky, sa do databázy nikdy nedostanú.
Záložné hľadanie podľa primárneho kľúča
SlugDefinition::for('slug')->from('name')->routeKey()->bindByKeyFallback();
// /products/red-chair and /products/42 both resolvebindByKeyFallback() (alebo globálne binding.key_fallback) po neúspechu podľa slugu skúsi primárny kľúč — a to len pre hodnoty v tvare kľúča: ctype_digit pri celočíselných kľúčoch, vlastná validácia uuid/ulid modelu pri unikátnych identifikátoroch. Číselný slug ako 2024 teda nikdy nezatieni záznam s id 2024.
Kombinácia s HasUuids / HasUlids
HasUuids a HasUlids tiež definujú resolveRouteBindingQuery, preto konflikt vyriešte cez insteadof — HasSlug si pre binding podľa kľúča ponechá ich ochranu pred chybnými identifikátormi:
use HasSlug, HasUuids {
HasSlug::resolveRouteBindingQuery insteadof HasUuids;
}Metóda deklarovaná priamo v triede modelu má potichu prednosť pred traitom — pri prechode na routeKey() odstráňte vlastné getRouteKeyName() / resolveRouteBinding().
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.