Codeigniter将参数传递给控制器​​索引

EsT*_*eGe 2 php codeigniter

我正在使用codeigniter构建一个教程系统,并希望实现以下URL结构:

  • / tutorials - >包含所有类别列表的简介页面
  • / tutorials/{作为字符串的类别} - >这将给出给定类别的教程列表,例如/ tutorials/php
  • / tutorials/{a category as string}/{an ID}/{tutorial slug} - >这将显示教程,例如/ tutorials/php/123/how-to-use-functions
  • / tutorials/add - >页面添加新教程

问题是,当我想使用前两种类型的URL时,我需要将参数传递给控制器​​的索引函数.第一个参数是可选类别,第二个参数是可选的教程ID.我已经做了一些研究,我贴过,所以我发现我可以添加喜欢的路线tutorials/(:any),但问题是,这条线路将通过add使用最后的URL(/教程/加)时,作为参数了.

我有什么想法可以实现这一目标吗?

Aid*_*das 13

您的路由规则可以按此顺序:

$route['tutorials/add'] = "tutorials/add"; //assuming you have an add() method
$route['tutorials/(:any)'] = "tutorials/index"; //this will comply with anything which is not tutorials/add
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器的index()方法中,您应该能够确定是否正在传递类别或教程ID!


Dec*_*bal 10

我确实认为重新映射必须对您的问题更有用,以防您想要向控制器添加更多方法,而不仅仅是"添加".这应该做的任务:

function _remap($method)
{
  if (method_exists($this, $method))
  {
    $this->$method();
  }
  else {
    $this->index($method);
  }
}
Run Code Online (Sandbox Code Playgroud)