使用CI(路由)创建动态页面URL - 一个简单的留言板示例

时间:2012-03-20 13:50:10

标签: php codeigniter

我觉得我有足够的CI经验,最终开始愚弄创建留言板...或者至少那就是我的想法,直到我被困在生成基于主题名称(slugs)的动态页面。 / p>

因此,我创建了一个控制器/模型/视图,并设置了一个向数据库提交必要信息的表单。我将线程拉出并显示它们,并根据主题标题为每个线程生成链接...我基本上遵循CI教程,编辑它以满足我的需要。

然而,理解生成动态页面URL的概念让我失望。通过听到在此过程中发生的具体情况,我理解得更好,而codeigniter教程(新闻)并没有很好地解释它。它只是告诉你该做什么以及如何做,而不是为什么。

任何人都想要更详细地解释动态页面编码的过程。

动态页面的含义是:

http://your-site.com/news/1/hello-world http://your-site.com/news/1/foo-bar

hello world和foo bar。

以下是让我感到困惑的一些部分:

<?php

class Pages extends CI_Controller {

    public function view($page = 'home')
    {

    }
}

继承路由

$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';

$ 1代表什么?那有什么具体的网址吗?你什么时候用2美元?它是用CI构建的代码,还是可以使用任何变量?

我确信答案可以更加详细,但如果有人能回答上述问题,我相信它会非常有用。

在理论上回答了这些问题,为论坛帖子制作新页面应该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:4)

  

$ 1代表什么?那有什么具体的网址吗?你什么时候开心   用2美元?它是用CI构建的代码,还是可以使用任何变量?

$1表示对通配符(:any)创建的变量的引用。没有$2,因为您只有一个通配符。

如果您创建了这样的路线,您将拥有第二个通配符:

$route['pages/(:num)/(:any)'] = 'pages/$1/$2';

话虽如此,你问题中的路由设置会破坏CI的MVC架构和路由系统的目的,因为你将所有路由重定向到pages/views,我很确定你想要的东西如下:

$route['default_controller'] = 'pages/view';
$route['pages/view/(:any)'] = 'pages/view/$1';

答案 1 :(得分:3)

<?php

class Pages extends CI_Controller {

    public function view($page = 'home')
    {

    }
}

此方法的相应网址为http://example.com/pages/view/。在方法中,它设置为$page = 'home',因为如果网址中没有第三个网段,则默认为home

$route['(:any)'] = 'pages/view/$1';

变量$1是您(:any)的所有内容。因此,如果您的网址是http://example.com/testing,它会路由到http://example.com/pages/view/testing,这会将您的$ page var从您的查看方法设置为“测试”。