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。为此,您可能需要一个不同的控制器(和视图),并且必须复制所有代码,