2013-04-24 84 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