2014-09-12 61 views
2

所以,這是我的控制器:Codeigniter路由問題。調用不同的控制器功能取決於傳遞參數

class Catalog extends CI_Controller { 

    function index() 
    { 
     echo "Catalog"; 
    } 

    function view_category($category_slug) 
    { 
     echo "category_slug = ".$category_slug; 
    } 

    function view_brand($category_slug, $brand_slug) 
    { 
     echo "category_slug = ".$category_slug; 
     echo "<br>"; 
     echo "brand_slug = ".$brand_slug; 
    } 

    function view_product($category_slug, $brand_slug, $product_slug) 
    { 
     echo "category_slug = ".$category_slug; 
     echo "<br>"; 
     echo "brand_slug = ".$brand_slug; 
     echo "<br>"; 
     echo "product_slug = ".$product_slug; 
    } 
} 

這是我的routes.php文件:

$route['catalog/(:any)'] = 'catalog/view_category/$1'; 
$route['catalog/(:any)/(:any)'] = 'catalog/view_brand/$1/$2'; 
$route['catalog/(:any)/(:any)/(:any)'] = 'catalog/view_product/$1/$2/$3'; 

不過沒關係我有多少參數傳遞 - 它總是調用view_category函數。爲什麼?

由於

回答

2

由於強制部分(即控制器名稱)它不會工作是相同的所有3路,並之後catalog/任何數量的參數將滿足第一路線

解決方案可以(未經測試)按照以下順序顛倒您的路線順序(即降序排列的參數數量)。檢查它是否可行 -

$route['catalog/(:any)/(:any)/(:any)'] = 'catalog/view_product/$1/$2/$3'; 
$route['catalog/(:any)/(:any)'] = 'catalog/view_brand/$1/$2'; 
$route['catalog/(:any)'] = 'catalog/view_category/$1'; 
+1

我不知道它是如此工作。非常感謝! – Molod 2014-09-13 07:48:36

相關問題