Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 控制器中的编码和Codeigniter中的模型_Php_Codeigniter_Cakephp - Fatal编程技术网

Php 控制器中的编码和Codeigniter中的模型

Php 控制器中的编码和Codeigniter中的模型,php,codeigniter,cakephp,Php,Codeigniter,Cakephp,我是codeigniter的新手,我对Controllers和Models中的codeigniter 为注销编写代码的最佳方法 控制器Logout.php <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Logout extends CI_Controller { public function __construct() {

我是
codeigniter
的新手,我对
Controllers
Models
中的
codeigniter

注销编写代码的最佳方法

控制器
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();
        }
    }
?>
<?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');
        }
    }
?>
此外,我们所有与
数据库
无关的逻辑都应该用
模型
控制器
只有
重定向
控制器处理是否正确


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

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

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

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

Cake和CI在控制器中加入了太多的逻辑,使模型太薄,以至于无法使用默认的控制器和模型制作一个合适的MVC应用程序。我所说的“瘦模型”是指它们通常只有一种类型的“模型”,即DAL类。MVC中的“模型”不仅仅是一种类型的类,它是一组建模业务逻辑所需的任何形状的东西


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

代码点火器遵循MVC模式。这意味着模型是数据库层,视图是前端,控制器是模型和视图之间的中间层。CI的基本流程如下所示

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

  • 在使用CI时,我们必须遵循MVC规则,因为我们不应该在控制器和模型中回声任何东西。因此,不需要在与数据库无关的模型中编写逻辑

    在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中,视图也可以是网页 可以是页眉或页脚之类的页面片段。它也可以是RSS 页面,或任何其他类型的“页面”
    • 控制器充当模型、视图和处理HTTP请求和请求所需的任何其他资源之间的中介 生成一个网页
    所以我同意@deceze的观点:CakePHP、Codeigniter和许多类似的框架不能正确地实现MVC


    所以,如果您熟悉一些java框架,如hibernate或jpa,您可以通过使用第三个库(如。。它使您的模型工作成为一个基础或数据库对象系统,您只需要关心系统正在使用的数据库对象的性质。

    搜索后,我得到了一些有用的URL

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

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


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

    “Cake和CI将WAAAAAAAAAAAAAAAAAY的逻辑放入控制器中”你能提供一个例子吗?@deceze这意味着,我在
    问题中编写的代码是
    正确的
    ?您还可以告诉我如何在
    帮助程序中使用
    数据库
    ?@非常完美的示例:CakePHP EmailComponent是一个控制器组件。电子邮件不属于控制器!您发送电子邮件是某些业务逻辑步骤的一部分;来自模型!此外,模型通常只是DAL,插入和获取逻辑被推送到控制器中。我对CI几乎没有什么经验,我只知道它很相似,以至于连蛋糕都做不好。@Rohan有一个“注销模型”是很奇怪的。您的模型中应该有一个负责身份验证的类。登录和注销是该类的一部分。@请参阅。控制器中有大量的业务逻辑。想象一下,您想为应用程序创建一个替代接口,比如CLI接口或RESTful API。为此,您可能需要一个不同的控制器(和视图),并且必须复制所有代码,