Codeigniter - 为索引变量保留URI段

时间:2015-10-04 19:11:03

标签: php codeigniter routing uri url-routing

好,

基本上我想做的就是像这样路由网址:

www.mypage.com/{controller}/[var1]/{any-function}

也就是说,应始终保留段2以将变量传递给索引,而后续任何段应该像往常一样调用这些函数。 我尝试过使用routes.php,但无法让它发挥作用。

我该如何处理?

编辑:

$route['(:any)'] = "site/$1";    
$route['(:any)/(:any)'] = "site/$1/$1";    
$route['(:any)/(:any)/(:any)'] = "site/$1/$1/$1";    
$route['/(:any)/news'] = "site/index/news";  
$route['12'] = 'site/index/$1/';
$route['47'] = 'site/index/$1/';

...

www.mypage.com/news - 确实有效(调用函数)

www.mypage.com/12/ - 确实有效(将变量传递给索引)

www.mypage.com/12/news - DOESN' T的工作目标是通过在单个网址中执行上述两个操作来使其工作。请注意,除了“新闻”之外,还有更多功能。所以,我们不要局限于此。

12 - 变量; news - 现有和正常运作的职能。

2 个答案:

答案 0 :(得分:0)

你在这里遇到的问题是(:any)占位符是贪婪的,没有路由可以跳过它提到的一个。你应该始终保持通配符路由,并在第一时间使用特定的路由。

$route['12'] = 'site/index/$1/';
$route['47'] = 'site/index/$1/';
$route['/(:any)/news'] = "site/index/news";
$route['(:any)/(:any)/(:any)'] = "site/$1/$1/$1";
$route['(:any)/(:any)'] = "site/$1/$1";
$route['(:any)'] = "site/$1";

试试此订单。还docs

答案 1 :(得分:0)

我最终在主控制器中创建了2个新函数(因为我只需要传递2个可能的变量),让它们称之为F1; F2,并相应地调用索引

  

mywebsite.com/F1或F2 /索引或功能

允许我使用函数代替变量作为变通方法。所以在OP示例中,12将是函数(F1或F2),而不是变量。