我是codeigniter
的新用户,我对Controllers
中Models
和Codeigniter
中编写的代码感到困惑。
为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
做同样的事情那么那个案例会有什么变化?
答案 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
答案 2 :(得分:0)
Code Igniter遵循MVC模式。这意味着Model是数据库层,Views是前端,Controllers是模型和视图之间的中间层。 CI的基本流程是这样的。
在使用CI时,我们必须遵循MVC规则,因为我们不应该echo
控制器和模型中的任何事情。因此,不需要在与数据库无关的模型中编写逻辑。
答案 3 :(得分:0)
- 模型代表您的数据结构。通常,您的模型类将包含帮助您检索,插入和的函数 更新数据库中的信息。
- 视图是呈现给用户的信息。视图通常是一个网页,但在CodeIgniter中,视图也可以 是一个页眉片段,如页眉或页脚。它也可以是RSS 页面或任何其他类型的“页面”。
- Controller充当模型,视图和处理HTTP请求所需的任何其他资源之间的中介 生成一个网页。
所以我同意@deceze:CakePHP,Codeigniter和许多类似的框架没有正确地进行MVC。
因此,如果你熟悉一些像hibernate或jpa这样的java框架,你可以通过使用像CI datamapper这样的第三个库来更容易地将CodeIgniter模型的模型用作ORM系统。它使你的模型工作为基础或数据库对象系统,您只关心系统正在使用的自然数据库对象。
答案 4 :(得分:0)
搜索之后,我得到了一些有用的网址,
模型 - 这是应用程序的一部分,它定义了一组抽象背后的基本功能。可以在模型中定义数据访问例程和一些业务逻辑。
查看视图可准确定义向用户显示的内容。通常,控制器将数据传递到每个视图以便以某种格式呈现。视图通常也会从用户收集数据。这是您可能在MVC应用程序中找到HTML标记的地方。
控制器 - 控制器将整个模式绑定在一起。他们操纵模型,根据用户的请求和其他因素决定显示哪个视图,传递每个视图所需的数据,或者完全将控制权移交给另一个控制器。大多数MVC专家建议»尽可能让控制器保持苗条。