0

我的 config/routes.php 文件中有以下内容:

$route['(:any)'] = "dashboard/index/$1";

这在访问以下 url 时按预期工作:mysite.com/user/id,仪表板控制器中的函数被调用,第一个参数是“用户”和第二个“id”。但是,当通过 post 并获取诸如mysite.com/user/id?page=2之类的值时,该函数似乎忽略了 post 参数,并且第一个(也是唯一的)参数是“2”。

我的 config.php 文件具有以下值:


$config[‘uri_protocol’]  = “AUTO”;
$config[‘enable_query_strings’] = TRUE;

和.htaccess:


RewriteEngine on
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

我的路线状况是否遗漏了什么?

4

2 回答 2

1

这绝对是您的自定义路线,请您尝试 yoursite.com/user/id/?page=2 因为我认为字符串 id?page=2 作为一个参数传递。您还可以通过打印传递的 url 键数组来进行调试:

回声'<pre>';
print_r($this->uri->segment_array());
回声'</pre>'

你会得到所有的参数传递给你的控制器动作。您还可以看到这个答案:在 codeigniter 中处理关于扩展核心 URI 类的问号(如果需要)。我希望这会有所帮助,否则更多信息会有所帮助,例如,当您使用像 site.com/user/id 这样的普通请求以及在执行 site.com/user/id 时,控制器中传递的 url 键是什么? page=2 个请求。

****** 编辑 ********** 如果您使用的是 CI 1.7.1 或 1.7.2,那么您将获得 [1] => 页面,因为在 _fetch_uri_string 方法中您有以下内容:

if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
{
     $this->uri_string = key($_GET);
     返回;
}

由于您有 site.com/user/id/?page=2 这意味着: $_GET['page'] = 2 并且 page 是 $_GET 中键的名称

请使用上面关于如何在您的应用程序中扩展此类的链接并在此处添加您自己的逻辑,例如,这样的内容适用于 1.7.1 或 1.7.2

if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
{
     //注释这行因为你不需要它
     //$this->uri_string = key($_GET);

     //如果有,则获取当前页码
     $page_number = (int) $_GET['page'];

     //在这里用正确的id设置uri_string并传递id(你也应该在这里得到)和页码作为第二个参数然后返回;进一步停止执行
     $this->uri_string = 'dashboard/index/id/'.$page_number
     返回;
}

//在您的仪表板控制器中:
//将默认值设置为0并进一步处理
公共函数索引($id=0, $page_number=0)
{

}

希望这可以帮助

于 2011-03-24T23:26:27.123 回答
0

uri 段在这里不会帮助你。你应该得到页面的价值

$page = $this->input->get('page');

你的方法界面是什么样的?

我刚试过这个

public function index($one = '', $two = '')
{
    echo $one.', '.$two.', ';
    echo '['.$this->input->get('page').']';
}

它输出这个:user, id, [2]

于 2011-03-25T14:28:45.260 回答