2016-03-24 10 views
1

私は私が読んでどこでも検索が、私は1ルートでこれを扱うことができる方法を見つけ出すことはできませんしている::Laravel 4.2およびURL

I場合は、次の

 whatever.com/products/accessories/1 
     whatever.com/products/amplifiers/2 
     whatever.com/products/speakers/3 

のようになります。URLを持っています私は、次のルートを使用することができ、次の

 whatever.com/products/1 
     whatever.com/products/2 
     whatever.com/products/3 

を行う::

Route::model('product', 'Product'); 

    Route::get('products/{product}', function(Product $product) 
    { 
     return View::make('product', array('product' => $product->toArray())); 
    }); 

しかし、これは事前

答えて

0

中間パラメータを適用して意味のあるものにするために、渡された最後のIDをビルドしながら、Route Model Bindingにリゾルバ関数を使用できます。レゾルバ関数に渡される2番目のパラメータはIlluminate\Routing\Routeのインスタンスで、APIを確認するとparameter()メソッドがあり、の値を得ることができます。パラメータがルートにあります。これにより、両方のパラメータにアクセスし、そこからクエリを構築することができます。私は、結果がない場合'Not found'を言う文字列を返すのですが、あなたは何を返すことができ

Route::bind('product', function($value, $route){ 
    $category = $route->parameter('category'); 
    $product = Product::where(['id' => $value, 'category' => $category])->first(); 
    return $product ?: 'Not found'; 
}); 

Route::get('products/{category}/{product}', function($category, $product) 
{ 
    return View::make('product', array('product' => $product->toArray())); 
}); 

注意。これにより、中間パラメータが実際に意味を持つようにして、whatever.com/products/amplifiers/2は実際の結果を返しますが、whatever.com/products/fake/2は返さないようにすることができます。

+0

これはまさに私が探していたものです。どうもありがとうございました。 – zr1vette

0

おかげで検索の時間後、私は以下のソリューション

ルート::取得( '製品/ {P1?}/{p2のを発見した非常にフレンドリーなURLを作成していないDOS ?}/{p3?}/{p4?} '、' ProductController @ index ');

+0

このようなオプションのパラメータを使用することはできますが、何か入力しても一致する可能性があるため、中間の「商品カテゴリ」パラメータが無意味であるという事実にはまだ対処できません。両方のパラメータが依然として強制され、意味を持つようにする私の解決策をチェックしてください。 –

関連する問題