Codeigniter中控制器和模型的编码

时间:2013-05-27 07:49:08

标签: php codeigniter cakephp

我是codeigniter的新用户,我对ControllersModelsCodeigniter中编写的代码感到困惑。

logout

编写代码的最佳方式

控制器 Logout.php

<?php 
    if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    class Logout extends CI_Controller {

        public function __construct()
        {
            parent::__construct();
            $this->load->model('logout_model');
        }

        function index()
        {
            $this->logout_model->logout();
        }
    }
?>

模型 Logout_model.php

<?php
    if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    class Logout_model extends CI_Model {
        public function __construct()
        {
            parent::__construct();
        }
        function logout()
        {
            $this->session->userdata = array();
            $this->session->sess_destroy();
            redirect(base_url().'admin/login','refresh');
        }
    }
?>

我们与database无关的所有逻辑都应该写在ModelController中 是否正确,只有redirectionsControllers处理?

如果我会在Cake php做同样的事情那么那个案例会有什么变化?

5 个答案:

答案 0 :(得分:2)

CakePHP,Codeigniter和许多类似的框架没有正确地做MVC

“模特”是“你的应用”。您的应用所做的一切都属于模型。这包括会话,登录,注销,身份验证等 该视图包含与呈现和可视化模型中的数据完全相关的代码 控制器是一个粘合剂,将两个部分保持在一起,在Web应用程序中,它主要处理接收输入并调用正确的模型方法和视图。

简而言之:根据您需要的输出,视图是可以互换的,控制器可以互换,具体取决于您获得的输入,模型不可互换,因为它是您的核心应用程序。一旦您理解一个适当的MVC结构应该是显而易见的。

Cake和CI将 waaaaaay 过多的逻辑放入控制器并使模型 waaaaay 太薄,以至于不可能用它们制作一个合适的MVC应用程序默认控制器和模型。而“瘦身模特”我的意思是他们通常只有一种类型的“模特”,这是一个DAL类。 MVC中的“模型”不仅仅是一种类型,它是模拟您的业务逻辑所需的任何形式的一组事物。

所以,无论你做什么,都要知道这不是适当的MVC。注意上面描述的理想分离,并且你永远不会使用这些框架来实现它。

答案 1 :(得分:1)

在CodeIgniter中,模型用于与数据库交互。 就个人而言,我会采取更务实的方法,并在您的情况下省略退出模型:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Logout extends CI_Controller {

    function index()
    {
        $this->session->sess_destroy();
        redirect('admin/login','refresh');
    }

}

// Omit PHP closing tag to avoid outputting unwanted data

CodeIgniter Style guide : PHP closing tag

答案 2 :(得分:0)

Code Igniter遵循MVC模式。这意味着Model是数据库层,Views是前端,Controllers是模型和视图之间的中间层。 CI的基本流程是这样的。

  1. 用户发出请求(称为控制器的操作)
  2. Controller查看是否与数据库层有关(并执行功能)
  3. Controller然后还将数据发送回具有所需数据的视图。
  4. 在使用CI时,我们必须遵循MVC规则,因为我们不应该echo控制器和模型中的任何事情。因此,不需要在与数据库无关的模型中编写逻辑。

答案 3 :(得分:0)

关注CodeIgniter document

  
      
  • 模型代表您的数据结构。通常,您的模型类将包含帮助您检索,插入和的函数   更新数据库中的信息。
  •   
  • 视图是呈现给用户的信息。视图通常是一个网页,但在CodeIgniter中,视图也可以   是一个页眉片段,如页眉或页脚。它也可以是RSS   页面或任何其他类型的“页面”。
  •   
  • Controller充当模型,视图和处理HTTP请求所需的任何其他资源之间的中介   生成一个网页。
  •   

所以我同意@deceze:CakePHP,Codeigniter和许多类似的框架没有正确地进行MVC。

因此,如果你熟悉一些像hibernate或jpa这样的java框架,你可以通过使用像CI datamapper这样的第三个库来更容易地将CodeIgniter模型的模型用作ORM系统。它使你的模型工作为基础或数据库对象系统,您只关心系统正在使用的自然数据库对象。

答案 4 :(得分:0)

搜索之后,我得到了一些有用的网址,

  1. http://www.codinghorror.com/blog/2008/05/understanding-model-view-controller.html
  2. http://pic.dhe.ibm.com/infocenter/wchelp/v6r0m0/index.jsp?topic=%2Fcom.ibm.commerce.developer.doc%2Fconcepts%2Fcsdmvcdespat.htm
  3. http://framework.zend.com/manual/1.12/en/learning.quickstart.intro.html
  4. http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model
  5. 模型 - 这是应用程序的一部分,它定义了一组抽象背后的基本功能。可以在模型中定义数据访问例程和一些业务逻辑。

    查看视图可准确定义向用户显示的内容。通常,控制器将数据传递到每个视图以便以某种格式呈现。视图通常也会从用户收集数据。这是您可能在MVC应用程序中找到HTML标记的地方。

    控制器 - 控制器将整个模式绑定在一起。他们操纵模型,根据用户的请求和其他因素决定显示哪个视图,传递每个视图所需的数据,或者完全将控制权移交给另一个控制器。大多数MVC专家建议»尽可能让控制器保持苗条。