1

我是新手,我对编写的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应该写在Model或者Controller 是否正确,只有由redirections处理Controllers

如果我会做同样的事情,Cake php那么在这种情况下会有什么变化?

4

5 回答 5

2

CakePHP、Codeigniter 和许多类似的框架不能正确地执行 MVC

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

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

Cake 和 CI 将waaaaaay过多的逻辑放入控制器中,并使模型waaaaaay太薄,以至于无法使用其默认控制器和模型制作合适的 MVC 应用程序。我所说的“瘦模型”是指它们通常只有一种“模型”,即 DAL 类。MVC 中的“模型”不仅仅是一种类,它是一组以任何形式对业务逻辑建模所必需的事物。

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

于 2013-05-27T07:56:36.327 回答
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 风格指南:PHP 结束标记

于 2013-05-27T08:15:35.613 回答
0

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

  1. 用户发出请求(调用控制器的操作)
  2. 控制器查看是否与数据库层有关(并执行功能)
  3. 然后,控制器还将数据与所需数据一起发送回视图。

在使用 CI 时,我们必须遵循 MVC 规则,因为我们不应该echo在控制器和模型中做任何事情。所以不需要在与数据库无关的模型中编写逻辑。

于 2013-05-27T07:57:45.540 回答
0

按照CodeIgniter 文档

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

所以我同意@deceze 的观点:CakePHP、Codeigniter 和许多类似的框架不能正确地执行 MVC。

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

于 2013-05-27T10:43:33.683 回答
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

模型 -这是应用程序的一部分,它在一组抽象背后定义其基本功能。数据访问例程和一些业务逻辑可以在模型中定义。

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

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

于 2013-05-27T11:01:08.707 回答