2011-08-30 70 views
2

我有一个网站,有很多网页的碱根(例如/contact,​​,/home, /faq,/privacy,/tos等)。我的问题是这些应该全部是单独的控制器还是具有多种方法的控制器(例如,main.php控制器内的contact,about,index)?Codeigniter多控制器与许多方法?

更新: 我才意识到是默认的控制器内的方法不无默认控制器的URL显示(即main/contact不会自动路由/contact如果主要是默认的控制器)。所以你需要进入路线并覆盖每个page

回答

4

是坏的,如果所有的这些都只是网页,我建议把它们放入一个单独的控制器。我通常最终会将这样的静态页面放入“页面”控制器中,并为每个静态页面放置路由以绕过我的URL中的“/页面”。

+0

我会喜欢一种方法来自动执行路由。 :( – ThomasReggi

+0

我发现自动获取路由的唯一方法是使用类似'$ route ['(:any)'] ='pages/$ 1'的路由;'但是我必须声明所有路由我的控制器...我从来没有真正做到这一点,除非我有更多的静态页面比控制器。 –

+0

@ThomasReggi ...为什么?这将需要5分钟为这些网页写你的路线,然后你就完成了... – jondavidjohn

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功能共享相同的功能。

但是这仅仅是一个情况下,有可能是疗法的情况下,我的例子能为...

1

您列出的页面名称可能应该是主控制器内部的不同方法。当您具有与另一个特定实体(如用户)相关的其他功能时,您可以为用户实体创建另一个控制器,并使用不同的方法显示用户,更新用户,注册用户。但它的确是一种工具,可以让您以一种对您的域和域模型有意义的方式来组织您的应用程序。

2
应用

/配置/ routes.php文件

$route['contact'] = "mainController/contact"; 
$route['about'] = "mainController/about"; 
$route['home'] = "mainController/home"; 
$route['faq'] = "mainController/faq"; 
$route['privacy'] = "mainController/privacy"; 

,你应该添加所有的这些方法的mainController.php内

您也可以保存在数据库中的网页的内容,并他们查询它。例如,您可以发送URL作为关键字来识别页面内容

$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 
    }  
    } 

希望这对你的作品