0

URIから収集したデータに基づいてコントローラーを選択できるようにしたいと思います。

カテゴリテーブルとサブカテゴリテーブルがあります。基本的に私は次の形式のURLを持っています(:any)/(:any)。最初のワイルドカードは都市のナメクジ(つまり、エディンバラ)で、2番目のワイルドカードはカテゴリまたはサブカテゴリのナメクジになります。

そのため、私のルートでは、そのルートのカテゴリを検索します。見つかった場合は、コントローラー:forsaleとメソッド:get_categoryを使用します。カテゴリでない場合はサブカテゴリを検索し、そこで見つかった場合はコントローラー:forsaleとメソッド:get_subcategoryを使用します。サブカテゴリでない場合は、他のルートを探し続けたいと思います。

Route::get('(:any)/(:any)', array('as'=>'city_category', function($city_slug, $category_slug){
    // is it a category?
    $category = Category::where_slug($category_slug)->first();
    if($category) {    
        // redirect to controller/method
    } 

    // is it a subcategory?
    $subcategory = Subcategory::where_slug($category_slug)->first();
    if($subcategory) {
        // redirect to controller/method
    }
    // continue looking for other routes
}));

まず、実際にリダイレクトせずにここでコントローラー/メソッドを呼び出す方法がわかりません(したがって、URLを再度変更します)。

そして第二に、これはこれを行うための最良の方法でさえありますか?を使い始めまし/city_slug/category_slug/subcategory_slugた。しかし、私は見せたいだけですcity_slug/category|subcategory_slugが、2番目のナメクジがどれであるかを知る方法が必要です。

最後に、(:any)/(:any)の後に続く他のURLが使用されている可能性があるため、他のルートも探し続けることができるようにする必要があります。

4

1 に答える 1

1

質問に順番に答えてください:
1。異なるものを使用する代わりにcontroller#action、単一のアクションを使用し、2番目のスラッグ(カテゴリまたはサブカテゴリ)に基づいて、異なるビューをレンダリングすることができます(このアプローチは好きではありませんが、#2を参照してください)および#3):

public class Forsale_Controller extends Base_Controller {
  public function get_products($city, $category_slug) {
    $category = Category::where_slug($category_slug)->first();
    if($category) {    
      // Do whatever you want to do!
      return View::make('forsale.category')->with(/* pass in your data */);
    }

    $subcategory = Subcategory::where_slug($category_slug)->first();
    if($subcategory) {
      // Do whatever you want to do!
      return View::make('forsale.sub_category')->with(/* pass in your data */);
    }
  }
}

2.私/city_slug/category_slug/subcategory_slugはあなたの方法よりもはるかに優れていると思います!これで行かなくちゃ!
3.繰り返しますが、ルートを修正する必要があります。私はいつも、私を混乱させないようにルートを作成しようとしています。Laravelもそうです!のようなもの/products/city/category/subcategoryははるかに明確です!

それがお役に立てば幸いです(私のコードは擬似コードのようなもので、テストされていません)!

于 2013-01-17T12:34:04.000 に答える