2017-06-18 3 views
0

Ich habe es einfach gemacht, aber /maps/{category}/{map} funktioniert nicht richtig.Route Parameter laravel Ausgabe

Putting alles auf {category} zeigt das gleiche Ergebnis.

Ich möchte ein Ergebnis anzeigen, wenn der Name der Kategorie und die ID der Karte genau übereinstimmen, sonst auf die Startseite umleiten.

Meine Route

Route::get('/maps/{category}', '[email protected]'); 
Route::get('/maps/{category}/{map}', '[email protected]'); 

Mein Controller

public function show(Category $category, Map $map) 
{   
    return view('maps.show', compact('map')); 
} 

Vorlage Meiner Klinge

{{ $map->title }} 

Antwort

0

Swap über die Routen in der Routenberechnung Datei, so dass die spezifischere eines ersten. erste

Route::get('/maps/{category}/{map}', '[email protected]'); 
Route::get('/maps/{category}', '[email protected]'); 
0
Route::get('/maps/{category}', '[email protected]'); 

ist eine verallgemeinerte Strecke, so dass es mehr als

Route::get('/maps/{category}/{map}', '[email protected]'); 

Spiele sollten Sie die Show-Route-Liste.

Um ein genaues Modellattribut (z. B. Name) zu finden, sollten Sie die Auflösungslogik anpassen, die der Router in der Boot-Methode des Routendiensteanbieters verwendet. Zum Beispiel:

Route::bind('category', function ($value) { 
    return App\Category::where('name', $value)->first(); 
}); 
Route::bind('map', function ($value) { 
    return App\Map::where('id', $value)->first(); 
}); 
0

Zum einen ist es nicht erforderlich, um Routen zu tauschen, wenn Sie 5.4 verwenden, da ich mit 5.4 gestartet Laravel verwenden ich nichts für frühere Versionen sagen kann.

Wenn Sie die gesuchte Karte filtern möchten, wenn sie der angegebenen Kategorie entspricht, können Sie die "whereHas" -Methode mit eloquenten Worten verwenden, wenn Sie die Beziehung zwischen Kategorie und Karte definiert haben.

"one to many (Inverse)" Beziehung ist, was Sie verwenden müssen, hier überprüfen: https://laravel.com/docs/5.4/eloquent-relationships#one-to-many-inverse

und Abfrage Beziehung ist, was Sie wissen müssen, hier überprüfen: https://laravel.com/docs/5.4/eloquent-relationships#querying-relationship-existence

Wie Sie Ihre Beziehung sollte aussehen wie in Karte Modell:

/** 
* Get the category that owns the map. 
*/ 
public function category() 
{ 
    return $this->belongsTo('App\Category'); 
} 

Ein Beispiel-Code:

public function show($category, $map) 
{   
    $map = Map::whereHas('category',function($query) use($category){ 
     $query->where('id', $category); 
    }); 

    return view('maps.show', compact('map')); 
} 
Verwandte Themen