【问题标题】:CodeIgniter Models & Controllers ConfusionCodeIgniter 模型和控制器混淆
【发布时间】:2013-12-12 21:37:41
【问题描述】:

今天我决定我应该开始依赖 PHP 框架,因为每次从头开始编写真的很累。作为我的框架,我选择了 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 
        ) );
    }
}

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

现在我的主要问题是:例如,我想为我的网站添加会员功能。我应该执行以下操作吗? :

Member Controller - 管理当前成员,所有表单动作都指向这个控制器,该控制器与 Members 模型通信(见下文)。

成员模型 - 处理所有数据库处理,例如:登录、注册、getMember。

【问题讨论】:

  • 使用控制器处理请求并将数据传递给视图,同时使用模型进行所有数据库交互并在模型中实现系统的所有业务逻辑,视图仅用于显示数据
  • @MKhalidJunaid 非常感谢您的快速回答,我已经知道您刚刚告诉我的内容,但我的主要问题是我给出的示例是否正确。
  • 您还应该看看用于构建网站结构的 HTML5 样板......ariok.github.io/codeigniter-boilerplate

标签: php codeigniter single-responsibility-principle


【解决方案1】:

我只是想在您的控制器中建议您可以分两行执行此操作:

    $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);

【讨论】:

  • 感谢您的建议!因此,您只需将页面名称分配给 main_content 变量,但是如何在视图中显示它呢?我需要使用什么功能?
  • $data['main_content'] 等于将要加载的页面。
  • 试试看这个系列,千万不要错过net.tutsplus.com/tutorials/php/codeigniter-from-scratch-day-1
  • 我有点糊涂了,$data['main_content'] 等于页面名称还是它的内容?如果它等于页面名称,我是否从视图本身加载页面?
  • 是的。因为在您看来,您加载了headerfooter,您只需要包含页面的main_content。和data['main_content'] = $contenttofill。您只需在控制器中调用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2010-12-19
  • 1970-01-01
相关资源
最近更新 更多