4

我正在用 Codeigniter 制作一个教程系统,但我有点坚持在我的教程中使用子类别。

URL 结构是这样的:/tutorials/test/123/this-is-a-tutorial

  • 教程是控制器
  • test 是该类别的简码
  • 123 是教程 ID(用于 SQL 查询)
  • this-is-a-tutorial 只是美化 URL 的一个蛞蝓

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

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

现在,如果我想要子类别(无限深度),例如:/tutorials/test/test2/123/another-tutorial。我将如何实现这一点?

谢谢!

4

3 回答 3

6

要阅读无限参数,您至少有两个有用的工具:

所以在你的控制器中:

  • 弹出最后一段/参数(这是你的 slug,不需要)
  • 假设最后一个参数是教程 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
}

其余代码和验证取决于您想对参数做什么。

于 2012-07-11T14:55:56.770 回答
0

您可能要考虑的另一个选项是 CodeIgniter 的控制器函数重映射功能,您可以使用它来覆盖默认行为。您将能够在控制器内定义一个函数,该函数将处理对该控制器的所有调用,并将剩余的 URI 参数作为数组传入。然后,您可以对它们做任何您想做的事情。

有关此事的文档参考,请参见此处

于 2012-07-11T23:50:18.833 回答
0

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

于 2012-07-11T14:44:50.423 回答