我在codeigniter中遇到路由问题。
假设我有一个名为Pages的控制器,其命名为product的方法可以执行以下操作:
public function product() {
$this->load->model('pages_model');
$productid = $this->uri->segment(3);
$data['product'] = $this->pages_model->getProduct($productid);
// ...load view, etc.
}
要访问特定产品,我的网址为www.example.com/pages/product/ID。
我想设置自定义路线,以便访问www.example.com/name-of-product访问该产品。
然而,把
$route['name-of-product'] = 'pages/product/ID';
不起作用。它将加载产品视图,但不会加载产品数据。如果我说
$route['name-of-product/:any/ID'] = 'pages/product/ID';
它可以正常工作,但我宁愿在网址的末尾没有两个额外的段。
答案 0 :(得分:1)
您不需要2个额外的细分。一个就足够了。
$route['PRODUCT_NAME/PRODUCT_ID'] = 'pages/product/PRODUCT_ID';
但是,如果我是你,我会将URL设为第一段,而不是产品的ID。
$route['PRODUCT_ID/PRODUCT_NAME'] = 'pages/product/PRODUCT_ID';
这样,如果我只知道产品ID,我就不必输入example.com//123
,这可能会导致一些问题。如果我没有弄错,如果你这样做,CI将尝试加载名为123
的控制器。