【问题标题】:Why isn't CodeIgniter passing variables? [duplicate]为什么 CodeIgniter 不传递变量? [复制]
【发布时间】:2010-12-30 01:48:39
【问题描述】:

可能重复:
CodeIgniter Routing

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

问题:URI 没有将变量传递给控制器​​。有人告诉我

States::state_summary 缺少参数 1

我可以为函数参数设置一个默认值,即。 ($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
}

...

【问题讨论】:

标签: php codeigniter argument-passing


【解决方案1】:

我认为您的路线应该调整为:

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

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

【讨论】:

  • '(.*)' 是一个有效的正则表达式。
  • 啊,当然。好吧,正如我所说,上面发布的路线对我有用。你试过了吗?
  • 泰勒,你把路线放在哪里?也许这与它有关。根据 routes.php 中的 cmets “保留的路由必须位于任何通配符或正则表达式路由之前。”
【解决方案2】:

好吧,我从来没有写控制器有参数,而是使用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 中的工作原理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多