/ / Php nâng cao / Comments (2)

Mô Hình MVC

VMC là mô hình quen thuộc với các bạn đã học framework hay đã tìm hiểu.Đó là điều không thể thiếu để chuẩn bị bắt đầu vào học 1 framework nào đó.Hôm nay mình sẽ hướng dẫn cho các bạn 1 mô hình MVC tự động load controller, model
– Ưu điểm :là tự động load controller model gửi dữ liệu và hiển thị trong view gần giống như trong các framework

– Các yêu cầu để thực hành được bài này các bạn lên xem qua các bài viết ở dưới để dễ tiếp cận hơn:

  1. Lập trình hướng đối tượng (OOP)
  2. Phương thức MAGIC và tính chất kế thừa trong PHP
  3. Phương thức và thuộc tính tĩnh

Cấu trúc mô hình MVC

– MVC chia ứng dụng của bạn làm 3 phần:

  1. Model: chịu trách nhiệm quản lý dữ liệu, mọi tác vụ tương tác với cơ sở dữ liệu(CSDL) của bạn đều nằm ở đây.
  2. View: chịu trách nhiệm hiển thị dữ liệu .
  3. Controller: điều khiển view và model làm việc với nhau. Controller nhận request từ client, gọi model thực thi tương ứng, và gởi trả dữ liệu lại cho client bằng view, view định dạng dữ liệu để hiển thị cho người dùng.

Mô hình xử lý dữ liệu của MVC framework

– Người dùng (client) dùng web browser, gởi request đến Server , mọi request gởi đến Server đều được điều hướng đến file index.php.
– Tại index.php chúng ta thực thi Controller, Controller có nhiệm vụ bắt request, phân tích request để gọi Model xử lý và đổ dữ liệu ra View tương ứng.
– Sau đó hiển thị kết quả View ra trình duyệt cho người dùng.
Các bạn có thể xem hình ảnh minh họa phía dưới để có cái nhìn khái quát về cách hoạt động của mô hình này

Mô hình MVC

Mô hình MVC

– ví dụ về chức năng đăng nhập bằng mô hình MVC

— Các bạn tạo class Bootstrap trong file Bootstrap.php với nội dung sau:

<?php
class Bootstrap{
    public function __construct(){
      if(isset($_GET['url'])){
          //lấy chuỗi url
          $url=rtrim($_GET['url'],"/");
          //chuyển chuỗi url và dạng mảng
          $url=explode('/',$url);
          $c=$url[0];//lấy tên controller
      }else{
          $c="index";
      }
      //load file controller
      $file_controller=__CONTROLLER_PATH.$c."_Controller.php";
      if(file_exists($file_controller)){
          require_once($file_controller);
      }else{
          require_once(__CONTROLLER_PATH."error_Controller.php");
          $controller=new error();
          $controller->index();
          return false;
      }
      //khởi tạo class controller tương ứng
      $name_controller=$c."_Controller";
      $controller=new $name_controller;
      //tự động load model của controller tương ứng
      $controller->LoadModel($c);
          if(isset($url[2])){
              //nếu tồn tại tham số của phương thức(action) trong controller sẽ chạy phương thức với tham số này
              $controller->{$url[1]}($url[2]);
          }else{
              //nếu tồn tại phương thức(action) trong controller sẽ chạy phương thức này
              if(isset($url[1])){
              $controller->{$url[1]}();
              }else{ //mặc định sẽ chạy phương thức index
              $controller->index();
              }
          }
    }
}
?>

+ file này có tác dụng tự động load controller và model khi người dùng tương tác tới trang
+ Lưu ý: Đặt tên file controller và model có phần đầu giống nhau,và tên file giống tên class,ví dụ user_Controller.php thì class tương tứng sẽ là class user_Controller và model sẽ là user_Model.php class user_Model.Như vậy trong view sẽ có thư mục tương ứng là thư mục user,
— Trang index sẽ khởi tạo Bootstrap như sau :

 <?php
//define path
require_once("config/define_path.php");
require_once("config/define_database.php");
//end define path
require_once(__LIB_PATH."Session.php");
require_once(__LIB_PATH."Controller.php");
require_once(__LIB_PATH."View.php");
require_once(__LIB_PATH."Model.php");
require_once(__LIB_PATH."Bootstrap.php");
$bootstrap= new Bootstrap;
?>

—Thư mục dự án của mình có tên là mvc,lên khhi người dùng truy cập vào trang http://localhost/vmc/user/login class Bootstrap sẽ thực hiện action login trong controller user_Controller.php và load model user_Model.php để sử dụng
— Sau đây là ví dụ login với mô hình này :
+ Chuẩn bị :tạo bảng user (user_name, pass)
+ file controllers/user_Controller.php :

 <?php
class user_Controller extends Controller{
    public function __construct(){
       parent::__construct();
    }
    public function index(){
        $this->view->render("user/index");
    }
    public function login(){
        if(isset($_POST['login'])){
            if($_POST['user']=="" or $_POST['password']==""){
                $this->view->msg="Hay dien user hay pass";//gửi thông bào tới trang view
                $this->view->render("user/login");
            }else{
                if($this->model->login()==true){
                    Session::set("login",true);
                    Session::set("user",$_POST['user']);
                    $this->view->redirect();
                }else{
                    $this->view->redirect("user/login");
                }
            }
        }else{
            $this->view->render("user/login");
        }

    }
    public function logout(){
        Session::set("login",false);
        Session::unset_session("user");
        $this->view->redirect();
    }
}
?>

—File models/user_Model.php :

 <?php
class user_Model extends Model{
    public $table="user";
    public function __construct(){
         parent::__construct();
    }
    public function login(){
        $user=$_POST['user'];
        $pass=md5($_POST['password']);
        $where=array('user_name'=>$user,'pass'=>$pass);
        $this->select($this->table,$where);
        if($this->num_rows()==0){
         return false;
        }else{
        return true;
        }
    }

}
?>

—file Views/user/login.php : sẽ hiển thị lỗi lấy từ controller nếu có và form đăng nhập

<h2>Trang login.....</h2>
<hr />
<div class="error" style="background:#FC6;color:red">
<?php
if(isset($this->msg)){
echo $this->msg;
}
?>
</div>
<form action="" method="post">
<label>User  </label><input name="user" type="text" /><br />
<label>Password  </label><input name="password" type="text" /><br />
<label></label><input type="submit" value="login" name="login"/><br />
</form>

— Các bạn có thể down về để hiểu rõ thêm : http://www.mediafire.com/?3d59b8eb70x27dx

Kết thúc bài viết: Qua bài này các bạn đã có cái nhìn tổng quát và cách hoạt động trong mô hình MVC rồi phải không.Đây là 1 phần quan trọng để các bạn bắt đầu vào học 1 framework nào đó.



04/09/2014
Written by nobitacnt

Trong bài viết không tránh khỏi những câu từ chưa chính xác,mong nhận được sự góp ý để website hoàn thiện hơn.Nếu thấy bài viết có ích với bạn hãy like và share để ủng hộ nhé :D.

Bài viết chùng chuyên mục

2 Comments

  1. The River says:
     /  Reply

    Bài rất hay. Cám ơn bạn nhé

  2. Thành says:
     /  Reply

    hay

Gửi bình luận

Giới thiệu

Mình tạo ra blog này với mong muốn chia sẻ và học hỏi kinh nghiệm trong quá trình thiết kế website. Website đang trong quá trình phát triển chân thành cảm ơn mọi sự góp ý của các bạn để làm cho website ngày càng hoàn thiên.

DMCA.com Protection Status
Theo dõi qua Email

Tổng hợp các bài viết về

Hoc php - CodeIgniter Framework - Laravel Framework - PHP va MYSQL