2014-09-12 64 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

相关问题