2009-08-17 7 views
5

商品カテゴリと商品を持つCIを持つeコマースウェブサイトを開発しています。 URLをルーティングして製品のコントローラに移動し、最初のセグメントのgetCategoryByName関数を実行してから、2番目のセグメントのgetProductByNameを実行します。CodeIgniter Routing

 
URL: 
products/docupen/rc805 
 
routes.php: 
$route['products/([a-z]+)'] = "products/getCategoryByName/$1"; 
$route['products/([a-z]+)/([a-z0-9]+)'] = "products/$1/getProductByName/$2"; 

しかし、その動作していない:ここで私が持っているものです。 "docupen"はカテゴリ、 "rc805"は製品です。

ありがとうございます。


ありがとうございました。これが私の必要としていたものです。

 
$route['products/:any/:num'] = "products/getProductByID"; 
$route['products/:any/:any'] = "products/getProductByName"; 
$route['products/:any'] = "products/getCategoryByName"; 

答えて

11

私の答えは、コリンの答えに少し踏み込んだものです。

私がCodeIgniterのルートで遊んだとき、私はルートの順序が重要であったという結論に達しました。最初の有効なルートが見つかると、リスト内の他のルートは実行されません。有効なルートが見つからない場合は、デフォルトのルートを処理します。私が入力した場合

$route['default_controller'] = "main"; 
$route['main/:any'] = "main"; 
$route['events/:any'] = "main/events"; 
$route['search/:any'] = "main/search"; 
$route['events'] = "main/events"; 
$route['search'] = "main/search"; 
$route[':any'] = "main"; 

は「http://localhost/index.php/search/1234/4321は」それはメイン/検索にルーティングされるだろうと私はその後、1234を取得するために$this->uri->segment(2);を使用することができます。次のように私は特定のプロジェクトのために遊ん

私のルートは、働いていました。あなたのシナリオでは

私は(順番は非常に重要である)しようとするだろう:

$route['products/:any/:any'] = "products/getProductByName"; 
$route['products/:any'] = "products/getCategoryByName"; 

私はルートあなたが望んだ道(products/$1/getProductByName/$2)に十分に知らないが、私はあなたが作成することになりかわかりませんこの特定の形式のURIを処理するコントローラ。コントローラーのColinが述べたように$this->uri->segment(n);ステートメントを使用すると、必要な処理を実行できるはずです。

5

あなたのURLから "docupen" と "rc805" セグメントを取得するためにURI classを使用する必要があります。これらの値は、必要な機能で使用できます。

あなたのURLがwww.yoursite.com/products/docupen/rc805ある場合たとえば、あなたは、セグメントを取得し、変数に割り当てるためにあなたの製品のコントローラで次のように使用します。

$category = $this->uri->segment(2); //docupen 
$product = $this->uri->segment(3); //rc805 

その後あなたは$ categoryと$ productを使うことができます。

2

CodeIgniterルートは正規表現ではうまく動作しません。彼らはサポートされている、私は彼らが働くことは決してできません。

$route['products/(:any)'] = "products/getCategoryByName/$1"; 
$route['products/(:any)/(:any)'] = "products/$1/getProductByName/$2";