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


creating dynamic page URLs with CI (routing) - a simple message board example

我觉得我在CI方面有足够的经验,终于可以开始创建留言板了。。。或者至少我是这么想的,直到我陷入了基于主题名称(slugs)生成动态页面的困境。

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

然而,理解生成动态页面URL的概念让我很困惑。通过准确地听到这个过程中发生的事情,我能更好地理解,而代码点火器教程(新闻)并没有很好地解释它。它只是简单地告诉你该做什么和如何做,而不是为什么。

任何人都可以尝试更详细地解释动态页面的编码过程。

我所说的动态页面是指:

http://your-site.com/news/1/hello-worldhttp://your-site.com/news/1/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的内置代码,还是可以使用任何变量?

我相信答案会更详细,但如果有人能回答上面的一些问题,我相信会很有帮助。

有了这些问题的答案,理论上,应该怎么做才能为论坛帖子创建一个新页面?

谢谢!

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

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

如果你创建了这样的路线,你会有第二个通配符:

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

话虽如此,你的问题中的路由设置有点违背了CI的MVC架构和路由系统的目的,因为你正在将所有路由重定向到pages/views,我敢肯定你想要这样的东西:

$route['default_controller'] = 'pages/view';
$route['pages/view/(:any)'] = 'pages/view/$1';
<?php
class Pages extends CI_Controller {
    public function view($page = 'home')
    {
    }
}

此方法对应的url为http://example.com/pages/view/.在该方法中,它被设置为$page = 'home',因为如果url中没有第三个段,它将默认为home

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

变量$1是您的(:any)。所以如果你的网址是http://example.com/testing,它将路由到http://example.com/pages/view/testing然后将视图方法中的$pagevar设置为"测试"。