CodeIgniter Yönlendirme

3 Cevap php

Ben ürün kategorileri ve ürünler var CI ile bir e-ticaret web sitesi geliştiriyorum. Bu ikinci segment için getProductByName çalıştırın, ilk segment için getCategoryByName işlevi çalıştırmak sonra, ürün denetleyiciye gidecek ki ben rotaya URL istiyorum. İşte ne var:

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

Ama onun değil çalışma. "DocuPen" kategorisinde ve "rc805" ürünüdür.

Şimdiden teşekkürler.


Yardımlarınız için hepinize teşekkür ederim. Bu benim için ne gerekli ile sona erdi budur.

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

3 Cevap

Benim cevabım Colin'in cevaba biraz oluşturur.

Ben CodeIgniter'daki yolları etrafında oynadığı zaman ben yollarının sırası önemli olduğu sonucuna geldi. Bu ilk geçerli rota bulduğunda listedeki diğer yolları yapmayacağım. Herhangi bir geçerli yolları bulmak değilse o zaman varsayılan yol idare edecek.

Aşağıdaki gibi benim özel proje için etrafında oynadı benim rotalar çalıştı:

$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";

Girdiğim "Eğer http://localhost/index.php/search/1234/4321" Bu ana / arama yönlendirilir olacak ve ben o $this->uri->segment(2); 1234 almak için kullanabileceğiniz .

Senin senaryoda ben (sırası çok önemlidir) denemek istiyorum:

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

Ben rotası (products/$1/getProductByName/$2) istedim yolu yeterli bilmiyorum, ama URI bu özel formu işlemek için bir denetleyici yaratacak nasıl emin değilim. Controller Colin tarafından belirtildiği gibi $this->uri->segment(n); ifadeleri kullanarak, istediğiniz ne yapmak gerekir.

Sen url gelen "DocuPen" ve "rc805" segmentleri almak için URI class kullanmalısınız. Daha sonra ihtiyacınız ne olursa olsun işlevleri bu değerleri kullanabilirsiniz.

Senin url www.yoursite.com/products/docupen/rc805 Örneğin, sen segmentleri almak ve değişkenlere atamak için ürünlerinizin denetleyicisi aşağıdakileri kullanabilirsiniz:

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

Eğer gerekir, ancak o zaman $ kategori ve $ ürünü kullanabilirsiniz.

CodeIgniter yolları regex ile iyi çalışmaz. Onlar desteklenen, ben onları işe almak asla değildir. Bu gibi onları yakalamak çok daha kolay olurdu

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