代码点火器可变长度参数列表


Codeigniter variable-length parameter list

我正在用Codeigniter制作一个教程系统,但我有点拘泥于在教程中使用子类别。

URL结构如下:/tutorials/test/123/this-is-tutorial

  • 教程是控制器
  • test是该类别的缩写
  • 123是教程ID(用于SQL查询)
  • 这个教程只是美化URL的一个噱头

我所做的是将类别作为第一个参数,将ID作为第二个参数传递给我的控制器函数:

public function tutorial($category = NULL, $tutorial_id = NULL);

现在,如果我想要子类别(深度无限),比如:/tutorials/test/test2/123/另一个教程。我将如何实现这一点?

谢谢!

对于读取无限参数,您至少有两个有用的工具:

  • func_get_args()
  • URI类

所以在你的控制器中:

  • 弹出最后一个片段/参数(这是你的鼻涕虫,不需要)
  • 假设最后一个参数是教程ID
  • 假设其余为类别

类似这样的东西:

public function tutorial()
{
    $args = func_get_args();
    // ...or use $this->uri->segment_array()
    $slug = array_pop($args);
    $tutorial_id = array_pop($args); // Might want to make sure this is a digit
    // $args are your categories in order
    // Your code here
}

其余的代码和验证取决于您对参数的具体操作。

如果需要变量类别,可以使用URI类:$this->uri->uri_to_assoc(n)

您可能需要考虑的另一个选项是CodeIgniter的控制器函数重映射功能,您可以使用该功能来覆盖默认行为。您可以在控制器中定义一个函数,该函数将处理对该控制器的所有调用,并将剩余的URI参数作为数组传递。然后你可以对他们为所欲为。

请参阅此处获取有关该事项的文档参考。