CI索引方法/功能在某些情况下不会自动添加?

时间:2013-05-03 07:03:25

标签: php codeigniter routes

如果我们在codeigniter中给出方法/函数的名称index,我们可以在不调用它的情况下转到该方法(因此我们只需要使用其controller名称)。

这是因为我们在config.php中指定了它(或CI默认指定它):

$config['index_page'] = 'index.php';

因此,当我使用library之类的form_validation时,我不需要指定索引方法。但是,当我尝试使用pagination类时,我遇到了问题。

我需要在代码中指定index方法,或pagination不起作用(如果我点击下一个分页索引,则会出现 404 错误) :

$config['base_url'] = site_url('/backend_umat');

所以,我必须使用:

$config['base_url'] = site_url('/backend_umat/index');

pagination完美无缺。

拜托,有人可以给我一个关于发生了什么的解释吗?我的问题 已解决,但我好奇关于这里发生了什么。

谢谢:D

3 个答案:

答案 0 :(得分:1)

这是因为当你在控制器名称CodeIgniter无法区分它之后有一些东西它是索引方法的参数时,它被假定为一种方法。导航到下一页时会附加到URL的内容,如果基本URL中没有方法名称,则会尝试从附加的URL中获取方法名称。

答案 1 :(得分:1)

您可以将所有backend_umat/路由到index

$routes['backend_umat/(:any)'] = 'backend_umat/index/$1';

仅当方法名称为空时为空,NULL

$routes['backend_umat/(^[\s]*$)'] = 'backend_umat/index/$1';

// or JUSt

$routes['backend_umat/(^[\s]*$)'] = 'backend_umat/index';

您可以在routes中添加config/routes.php配置。

答案 2 :(得分:1)

在codeigniter分页中:

  • $config['base_url']应该是完整的网址。即,base_url()/{CONTROLLER}/{FUNCTION}
  • 因此,如果您没有提供完整路径,分页课程将忽略 {FUNCTION} 并创建如下链接:
  

base_url()/{CONTROLLER}/{PAGE1} , base_url()/{CONTROLLER}/{PAGE2} , base_url()/{CONTROLLER}/{PAGE3}等等......而不是   base_url()/{CONTROLLER}/{FUNCTION}/{PAGE_NO}


现在代替你的函数有一个数字(页码),它在你的控制器类中不存在,但被假定为你控制器内的一个函数。这就是你得到 404 Page Not Found 错误的原因。

<小时/> 有两种方法可以解决这个问题。

  1. 你做的方式。 $config['base_url'] = site_url('/backend_umat/index');
  2. 使用路线
    routing.php 文件中定义: $route['backend_umat/(:num)'] = 'backend_umat/index/(:num)';
    控制器$config['uri_segment'] = 2;中 如果您在代码中使用了$this->uri->segment(3),请将其设为$this->uri->segment(2)
    那样做。