2017-06-18 8 views
0

私はこれを単純に作ったが、/maps/{category}/{map}は正しく動作しません。ルートパラメータの問題

{category}に何かを載せても同じ結果を示します。

/maps/php/1 
/maps/laravel/1 

カテゴリの名前とマップのIDが正確に一致する場合は結果を表示し、それ以外の場合はホームページにリダイレクトします。

マイルート

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

あなたのルートファイル内のルート上で、私のコントローラ

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

マイブレードテンプレート

{{ $map->title }} 

答えて

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

それ以上

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

に一致しますが、最初のショーのルートをリストする必要がありますので、より一般的なルートです。

正確なモデル属性(名前)を一致させるには、ルータがルートサービスプロバイダのブート方法で使用する解決ロジックをカスタマイズする必要があります。たとえば:

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

はまず、あなたが5.4を使用している場合、私は、以前のバージョンのために何を言うことができないlaravelを使用するように5.4で起動するので、ルートの順序を交換する必要はありません。

指定されたカテゴリに一致するかどうかを確認するには、カテゴリとマップの関係を定義している場合は「whereHas」メソッドを使用します。

「多くの(逆)にワン」の関係は、あなたが、使用ここをチェックするために必要なものです:https://laravel.com/docs/5.4/eloquent-relationships#one-to-many-inverse

との関係を照会することは、あなたが知っておくべきである、ここで確認してください:https://laravel.com/docs/5.4/eloquent-relationships#querying-relationship-existence

どのようにあなたの関係がすべき地図モデルのように見える:

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

コード例:

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

    return view('maps.show', compact('map')); 
} 
関連する問題