2017-08-01 12 views
0

ルートモデルバインドを使用して、各モデルのgetRouteKeyNameプロパティがidの代わりにslugを使用することができない場合は、次の2つのルートがあります。 laravelはどのルートを使うべきかを知ることができますか?Laravel 5.2同じ署名を持つルートモデルバインディング

Route::get('courses/{category}', function (App\Category $category) { 
    return $category->name; 
}); 

Route::get('courses/{location}', function (App\Location $location) { 
    return $location->name; 
}); 

テスト路線:

www.domain.com/courses/accounting 

www.domain.com/courses/france 

第2経路は、両方のルートのルート署名以来見たことはありませんが同一でありますか?

答えて

1

あなたが言ったように、Laravelは最初に合ったルートを取るので、2番目のルートは決して解雇されません。

/categories/{category}/course/locations/{location}/course

は、単にような何かにあなたのルートを変更します。

-1

はい、ルートの署名が同じであるため、2番目のルートは決して見えません。 コントローラ関数で処理することができます。これは、スラッグがリクエストパラメータとして利用できるようになり、条件付きで結果を返すことができるからです。お使いのコントローラで

Route::get('courses/{slug}',[email protected]); 

あなたはこのようにそれを行うことができます。

public function myfunction($slug) 
{ 
    if($slug == "category") 
    { 
    $category = new \App\Category; 
    return $category->name; 
    } 
    if($slug == "location") 
    { 
    $location = new \App\Location; 
    return $location->name; 
    } 

} 
+0

これが問題に与えられたコードのためのものは変更されません。実際、あなたはまったく同じことを達成するためにもっと多くの行を書いていました。 –

+0

私が提供したソリューションは、両方のルートで同じ接頭辞のURLを保持したい場合、仕事をします。私はそれが優雅な解決策ではなく、より多くのコード行を持っていることに同意します。 – PureSingh

関連する問題