簡體   English   中英

CodeIgniter路由

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM