我有一个网站,其中有很多网页在根网上存在(例如/contact
,/about
,/home
,/faq
,/privacy
,/tos
等)。我的问题是,这些都应该是单独的控制器还是一个具有多种方法的控制器(例如contact
控制器中的about
,index
,main.php
?
更新:
我刚刚意识到默认控制器中的方法没有默认控制器显示在url中(即。main/contact
如果main是默认控制器,则不会自动路由到/contact
。因此,您需要进入路线并覆盖每个page
。
答案 0 :(得分:4)
如果所有这些只是页面,我建议将它们放入一个控制器中。我通常最终会将这样的静态页面放到“页面”控制器中,并为每个静态页面添加路径以绕过我的URL中的“/ pages”。
答案 1 :(得分:2)
如果它们具有相同的功能,那么它们应该在同一个控制器中 例如,如果所有这些模型都使用相同的模型来获取内容,那么一个控制器就可以轻松处理它 为什么在一个控制器?因为你总是想重用你的代码。
class someController{
function cotact(){
print $this->getContentFromModel(1);
}
function about(){
print $this->getContentFromModel(2);
}
function home(){
print $this->getContentFromModel(3);
}
private function getContentFromModel($id){
return $this->someContentModel->getContentById($id);
}
}
(而不是print
,您应该使用加载view
)
在我的示例中看到所有函数如何使用相同的getContentFromModel函数来共享相同的功能。
但这只是一个案例,可能还有一些案例,我的例子可能不好......
答案 2 :(得分:2)
在application / config / routes.php
中$route['contact'] = "mainController/contact";
$route['about'] = "mainController/about";
$route['home'] = "mainController/home";
$route['faq'] = "mainController/faq";
$route['privacy'] = "mainController/privacy";
你应该在mainController.php
中添加所有这些方法您还可以保存数据库中页面的内容,然后查询它们。例如,您可以将网址作为关键字发送,以识别网页内容
$route['contact'] = "mainController/getContent/contact";
$route['about'] = "mainController/getContent/about";
$route['home'] = "mainController/getContent/home";
$route['faq'] = "mainController/getContent/faq";
$route['privacy'] = "mainController/getContent/privacy";
在这种情况下,你只需要在控制器“mainController”中创建一个名为“getContent”的方法,这个方法看起来像这样:
class mainController extends CI_Controller
{
public function getContent($param)
{
$query = $this->db->get_where('mytable', array('pageName' => $param));
// then get the result and print it in a view
}
}
希望这适合你
答案 3 :(得分:1)
您列出的页面名称应该是主控制器内部的不同方法。如果您具有与其他特定实体(如用户)相关的其他功能,则可以为用户实体创建另一个控制器,并使用不同的方法显示用户,更新用户,注册用户。但它实际上是一个工具,您可以以对您的域和域模型有意义的方式组织您的应用程序。
答案 4 :(得分:1)
我写了一篇关于组织可能对您有帮助的CodeIgniter控制器方法的博客文章。请在此处查看:http://caseyflynn.com/2011/10/26/codeigniter-php-framework-how-to-organize-controllers-to-achieve-dry-principles/