我一直在使用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模式?
感謝您的幫助。
有人會告訴你,它反對MVC的人會告訴你相反的。實踐表明,在視圖中必須只有簡單的邏輯(if/else),循環,轉義但對數據庫沒有請求(包括使用模型來做到這一點)。 它更好地收集並傳遞來自您的任何可變信息控制器到您的視圖.. – Svetoslav 2013-04-24 13:48:58
您正在使用CodeIgniter。所以,是的。單憑這一選擇,您已經違反了MVC指出的MVC模式和核心原則。 – 2013-05-18 06:05:30