CodeIgniter为什么不传递变量?

时间:2009-12-26 04:22:36

标签: php codeigniter argument-passing

  

可能重复:
  CodeIgniter Routing

应该发生什么:用户导航到URI,routes.php抓取State并将其发送到控制器,控制器从数据库查询返回一些信息。非常基本的东西。

问题:URI没有将变量传递给控制器​​。我被告知了

  

缺少状态的参数1 :: state_summary

我可以为函数参数设置默认值,即。 ($ st ='Alabama')一切顺利。

我甚至不知道这是怎么回事。也许至少告诉我需要测试什么来追踪错误。

URI:

http://example.com/index.php/states/Alabama

routes.php文件:

$route['states/(.*)'] = "states/state_summary/$1";

州控制器:

...

function state_summary($st)
{
// DB query
// Return data
}

...

2 个答案:

答案 0 :(得分:0)

我相信你的路线应该调整到这个:

$route['states/(:any)'] = "states/state_summary/$1";

这对我有用。 我不确定(。*)是否有效,因为我从未见过它。

答案 1 :(得分:0)

好吧,我从不编写控制器来获取参数,而是使用rsegment方法:

...

function state_summary()
{
  $st = trim($this->uri->rsegment(3));
  // DB query
  // Return data
}
...

有了这个,我对传递的参数有了更多的控制权。我可以使用trim或intval对其进行消毒,然后再将其传递给模型或库。

此外,codeigniter核心库中有一些关于路由url的调整。请参阅文件system/libraries/Router.php中的function _parse_routes()内的代码,第278行。这是URI路由在CI中的工作方式。