[英]CodeIgniter Routing
我正在開發一個包含產品類別和產品的CI的電子商務網站。 我想路由URL以便它將轉到產品控制器,然后為第一個段運行getCategoryByName函數,然后為第二個段運行getProductByName。 這是我有的:
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";
我的回答建立在科林的答案上。
當我在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 ”它將被路由到main / search,然后我可以使用$this->uri->segment(2);
檢索1234
。
在你的場景中我會嘗試(訂單非常重要):
$route['products/:any/:any'] = "products/getProductByName";
$route['products/:any'] = "products/getCategoryByName";
我不知道路由你想要的方式( products/$1/getProductByName/$2
),但我不確定如何創建一個控制器來處理這種特殊形式的URI。 使用$this->uri->segment(n);
科林在你的控制器中提到的陳述,你應該能夠做你想做的事。
您應該使用URI類從您的URL中檢索“docupen”和“rc805”段。 然后,您可以在所需的任何函數中使用這些值。
例如,如果您的網址是www.yoursite.com/products/docupen/rc805,則可以在產品控制器中使用以下內容來檢索細分並將其分配給變量:
$category = $this->uri->segment(2); //docupen
$product = $this->uri->segment(3); //rc805
然后你可以使用$ category和$ product。
CodeIgniter路由與regex不兼容。 他們受到支持,而不是我永遠無法讓他們工作。 像這樣抓住他們會容易得多
$route['products/(:any)'] = "products/getCategoryByName/$1";
$route['products/(:any)/(:any)'] = "products/$1/getProductByName/$2";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.