2013-04-24 38 views
1

我一直在使用CodeIgniter开发Web应用程序。MVC模式:使用视图模型中的函数

我也实现了所有遵循MVC结构的功能,但我不知道我是否到目前为止混淆自己...

如果我在视图中使用的功能从模型,是违反MVC模式?这是否被视为与模型交谈的观点?

让我告诉一些代码:

一位来自我的控制器:

public function loader($page){ 
    #load pages if these settings will be loaded for sure 
     if (! defined('BASEPATH')) exit('No direct script access allowed'); 

     $this->load->helper('url'); 
     $this->load->library('session'); 
     $this->load->model('app_model'); 
     $this->load->model('app_user_model'); 
     $this->load->view('app/header'); 
     $this->load->view($page); 
     $this->load->view('app/footer'); 
    } 

一位来自我的模型:

public function submit_login($username, $pass){ 
    //try to login, if the login credentials are correct, set the user session to username. 

     $this->db->select("name, PersonName"); 
     $this->db->where("name", $username); 
     $this->db->where("pass", $pass); 
     $result = $this->db->get("members"); 


     if ($result->num_rows() > 0){ 
      foreach($result->result() as $user){ 
       $this->session->set_userdata('user_name', $user->PersonName); 
       $this->session->set_userdata('user', $user->name); 
      } 
      return 1; 
     }return 0; 
    } 

局部视图:

$is_login = $this->app_user_model->is_loggedin(); 

if($is_login){ 
    //if user is logged in, prompt to log out 
    echo "Welcome back ".$this->session->userdata['user_name']."."; 
    echo anchor(base_url('profile/logout'), "logout"); 
    echo "<br/>"; 
}else{ 

    echo validation_errors(); 
    //if user is not logged in, ask to log in first 
    echo form_open('profile/login'); 

    $user_name = array(
       'maxlength' => '25', 
       'size'  => '55', 
       'style'  => 'width:30%; margin-left:5%', 
       'name'  => 'username', 
       ); 

    //get the date 
    echo "<div class='user_name_input'>"; 
    echo "Username(email)"; 
    echo form_input($user_name, '', 'class="user_name"'); 
    echo "</div>"; 

在这case,我叫is_loggedin()f rom user_model ..

我是否正确地遵循MVC模式?

感谢您的帮助。

+3

有人会告诉你,它反对MVC的人会告诉你相反的。实践表明,在视图中必须只有简单的逻辑(if/else),循环,转义但对数据库没有请求(包括使用模型来做到这一点)。 它更好地收集并传递来自您的任何可变信息控制器到您的视图.. – Svetoslav 2013-04-24 13:48:58

+0

您正在使用CodeIgniter。所以,是的。单凭这一选择,您已经违反了MVC指出的MVC模式和核心原则。 – 2013-05-18 06:05:30

回答

3

导致不被判断,但我认为你错过了一个MVC的重点。

url调用相关的控制器,控制器调用模型层来获取数据并确定视图,然后调用正确的视图。

因此,您可以调用登录控制器,它会调用模型来检查登录,并从那里显示登出按钮或错误。

我相信你可以围绕使用它自己的方式,但是,我认为,这是使用它的不正确的方法。

+0

我想你是对的... – led 2013-04-24 14:00:32

+0

不用担心,使用MVC流程需要一段时间,至少你问的是正确的问题,并注意到你没有正确使用它。 – We0 2013-04-24 14:09:11