时间:2011-08-30 05:24:40

标签: php model-view-controller codeigniter

我有一个网站,其中有很多网页在根网上存在(例如/contact/about/home/faq/privacy/tos等)。我的问题是,这些都应该是单独的控制器还是一个具有多种方法的控制器(例如contact控制器中的aboutindexmain.php

更新: 我刚刚意识到默认控制器中的方法没有默认控制器显示在url中(即。main/contact如果main是默认控制器,则不会自动路由到/contact。因此,您需要进入路线并覆盖每个page

5 个答案:

答案 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/