我有这部分代码:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Blog extends CI_Controller {
function _remap($page){
$this->index($page);
}
public function index($page = '1')
{
var_dump($page); exit;
}
}
当我点击domain/index.php/blog
时,var_dump返回我string(5) "index"
当我点击domain/index.php/blog/2
时,它会返回我 2,哪个是正确的?但是为什么?我有默认参数$page = '1'
?
当您点击domain/index.php/blog/2
时,这意味着您正在调用博客控制器的默认方法索引并将 2 作为参数传递。在这种情况下,它将替换默认参数$page = '1'
2。
当您点击domain/index.php/blog
时,将在没有任何参数的情况下调用索引函数,它将$page
为 1。
更新的答案(根据评论(
如果控制器包含名为 _remap(( 的方法,则无论 URI 包含什么,都将始终调用该方法。它覆盖 URI 确定调用哪个方法的正常行为,允许您定义自己的方法路由规则。
文档链接
使用以下代码它将解决您的问题。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Blog extends CI_Controller {
function _remap($page){
if($page=='index'){
$this->index($page = 1);
}
$this->index($page);
}
public function index($page = 1)
{
var_dump($page); exit;
}
}