2013-12-12 111 views
0

今天我决定开始依靠PHP框架,因为每次从头开始编写都非常耗时。作为我的框架,我选择了CodeIgniter,并且我想说这很棒,易于使用。但我有一些问题和困惑。我不确定如何构建我的网站,因为我不知道何时使用模型以及何时使用控制器。
我有现在的问题是:

CodeIgniter模型和控制器混淆

页面控制器

// PAGES CONTROLLER 
// As its name, this controller simply loads pages by a url query. 
class Pages extends CI_Controller { 
    /* 
    * Constructor - loads the variables model. 
    */ 
    public function __construct() { 
     parent::__construct(); 
     $this->load->model ('variables'); 
    } 
    /* 
    * Displays a page by its name. 
    */ 
    public function view($page = 'home') { 
     if (! file_exists ("application/views/pages/$page.php")) { 
      show_404(); 
     } 
     $data ['title'] = ucfirst ($page); 
     $data ['variables'] = $this->variables; 

     $this->load->view ("templates/header", $data); 
     $this->load->view ("pages/$page", $data); 
     $this->load->view ("templates/footer", $data); 
    } 
} 


变量模型

// VARIABLES MODEL 
// Used like a "mysql variables", all the data is taken from a table contains 2 
// rows: id and value. and those variables are mostly used for site settings. 
class Variables extends CI_Model { 
    /* 
    * Constructor, simply loads the database. 
    */ 
    public function __construct() { 
     $this->load->database(); 
    } 
    /* 
    * Gets a variable stored in the database. 
    */ 
    public function get($id) { 
     $query = $this->db->get_where ('variables', array (
       'id' => $id 
     )); 
     return $query->row_array()["value"]; 
    } 
    /* 
    * Sets a variable stored in the database. 
    */ 
    public function set($id, $value) { 
     $this->db->where ('id', $id); 
     $this->db->update ('variables', array (
       'value' => $value 
     )); 
    } 
} 

我使用正确的层次结构?有什么我可以改变的吗?

现在我的主要问题:让我们说,例如,我想为我的网站添加一个会员功能。我应该做以下事情吗? :

成员控制器 - 管理当前成员,并且所有表单操作都导致与成员模型通信的此控制器(请参见下文)。

成员模型 - 处理所有的数据库处理,功能如:login,register,getMember。

+0

处理请求和传递数据查看,同时使用型号为您所有的数据库交互和实施系统的所有业务逻辑模型中使用视图只用于显示数据 –

+0

@MKhalidJunaid使用控制器非常感谢您的快速回答,我已经知道你刚刚告诉我的是什么,但是我的主要问题是如果我对我给出的例子正确。 –

+0

你也应该看看HTML5锅炉板的建设网站结构.... http://ariok.github.io/codeigniter-boilerplate/ – Christopher

回答

2

我只是想在你的控制器建议你可以在两行做到这一点:

$this->load->view ("templates/header", $data); 
    $this->load->view ("pages/$page", $data); 
    $this->load->view ("templates/footer", $data); 

既然你可以加载一个视图中你的看法,那么你可以尝试:在您看来e.g template.php

$this->load->view('templates/header'); 
    $this->load->view($main_content); 
    $this->load->view('templates/footer'); 

而且你可能希望你的控制器没有太多的代码,因为所有繁重的任务应该在你的模型中,所以在你的控制器:

$data['main_content'] = $page; 
    $this->load->view('templates/template',$data); 
+0

谢谢你的建议!所以你简单地将页面名称分配给main_content变量,但是如何在视图中显示它?我需要使用什么功能? –

+0

'$ data ['main_content']'等于将要加载的页面。 – leonardeveloper

+0

尝试检查这个系列,不会错过任何一个http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-day-1/ – leonardeveloper