Wyjaśnienie wiązania modelu trasy

Wyjaśnienie wiązania modelu trasy

Jednym z najczęstszych wzorców routingu jest to, że pierwsza linia dowolnej metody kontrolera próbuje znaleźć zasób z podanym identyfikatorem.

Trasa :: 'Stores/id', funkcja ($ id)
$ sklepy = Store :: Find ($ id);
);

Laravel zapewnia funkcję, która upraszcza ten wzór zwany „wiązaniem modelu trasy.„Pozwala to zdefiniować tę nazwę parametru (e.G., ).

Istnieją dwa rodzaje wiązania modelu trasy: niejawne i niestandardowe (lub jawne).

Niejawne wiązanie modelu trasy

Najprostszym sposobem korzystania z wiązania modelu trasy jest nazwanie parametru trasy coś wyjątkowego dla tego modelu (e.G., Nazwij go $ sklep zamiast $ id), a następnie typehint ten parametr w metodzie zamknięcia/kontrolera i użyj tam tej samej nazwy zmiennej. Łatwiej jest pokazać niż opisać, więc spójrz na następny przykład:

Jawne wiązanie modelu trasy

Trasa :: 'Stores/Store', funkcja (suppe $ store)
Widok powrotu („sklepy.show ')-> z („sklep”, $ sklep);
);

Ponieważ parametr trasy (Store) jest taki sam jak parametr metody ($ Store), a parametr metody jest typowy modelem konferencyjnym (sklep $ Store), Laravel postrzega to jako wiązanie modelu trasy. Za każdym razem, gdy ta trasa jest odwiedzana, aplikacja zakłada, że ​​wszystko, co jest przekazywane do adresu URL zamiast Store, jest identyfikatorem, który powinien być używany do wyszukiwania sklepu, a następnie, że wynikowa instancja modelu zostanie przekazana do zamykania lub kontrolera metoda.

Niestandardowe wiązanie modelu trasy

Aby ręcznie skonfigurować wiązanie modelu trasy, dodaj linię taką jak ta w poniższym przykładzie do uruchomić() metoda w App \ dostawcy \ routeserviceProvider.

Publiczny rozruch funkcji (trasa $ router)

// po prostu umożliwia nadal działanie metody BOOT ()
rodzic :: boot ($ router);
// Wykonaj wiązanie
$ router-> model („Shop”, Store :: klasa);

Zdefiniowałeś teraz, że za każdym razem, gdy trasa ma parametr w swojej definicji o nazwie shop, Route Resolver zwróci instancję klasy sklepowej z identyfikatorem tego parametru URL.