Models trong CodeIgniter 3x

Hướng dẫn tạo models, cách ứng dụng models khi lập trình, cách viết các hàm, các function trong models trong codeigniter 3x, viết các hàm lọc dấu tiếng việt, hàm tạo username, hàm lọc script và ứng dụng
  • 15:18 15/11/2016
  • Kỳ Nhân
  • 0 Bình luận
  • 698

- Models trong codeigniter 3x có tác dụng góp các hàm xử lý trong codeigniter vào một file giúp code dễ quản lý và có thể sử dụng nhiều lần mà không cần phải viết lại trong từng controller.

- Trong các bài trước mình viết sẵn luôn trong controller vì hàm thêm, xóa, sửa ngắn gọn, lại có sẵn trong thư viện nên không chia ra file models, Ví dụ trước là mình tạo controller Groups, nếu viết model thì phải tạo models cho controller Groups, đó là có một controller, nếu nhiều controller thì các bạn phải tạo nhiều file Models khác nhau, mình thấy khá là mệt nên phần này mình hướng dẫn các bạn tạo một file models chứa các hàm cần thiết, các controller khác chỉ việc sử dụng, có một file dễ quản lý hơn nhiều file.

- Về việc viết trong controller cũng không gây hại gì, nếu các hàm dài, sử dụng thường xuyên các bạn nên viết trong models hay hơn.

- Để tạo models trong codeigniter 3x, các bạn vào application/models tạo file bất kỳ, như mình tạo file Mcode.php, chữ M viết hoa đầu tiên đễ phân biệt nó là file models cho dễ code.

- Để models hoạt động thì hàm bên trong file Mcode.php phải kế thừa từ class CI_Model và nội dung như bên dưới.

<?php
class Mcode extends CI_Model {
    function __construct() {
        parent::__construct();
    }
}
?>

- Để viết hàm trong model các bạn chỉ cần viết function vào thôi ví dụ

- Hàm mã hóa tạo mật khẩu, password từ text đưa vào

<?php
class Mcode extends CI_Model {
    function __construct() {
        parent::__construct();
    }
    public function hash($text) {
        $str=sha1(md5(sha1($text)));
        return $str;
    }    
}
?>

- Để sử dụng được function hash trong controller các bạn chỉ cần dùng hàm như

echo $this->mcode->hash('123');

- Kết quả là in ra một chuỗi mã hóa 3 lớp bằng sha1, md5 và sha1.

- Trước đó các bạn cần load thư viện models tên là mcode vào dự án nha. Cách load model theo dự án mình chỉ các bạn, tại application/core/MY_Controller.php thêm dòng $this->load->model('mcode'); tại function __construct của class Admin_Controller là ok code như bên dưới

function __construct() {
        parent::__construct();
        $this->load->helper('form');
        $this->load->library('pagination');
        $this->load->model('mcode');
}

- Các helper, library form, pagination là các bài trước có sẵn chỉ thêm dòng load model thôi nha các bạn.

- Như vậy việc tạo models, và ứng dụng, sử dụng đã ok, giờ mình cung cấp cho các bạn một số hàm cơ bản, đễ thuận lợi cho bài viết thêm, xóa, sửa user.

- Hàm lọc dấu tiếng việt

public function stripUnicode($str) {
        if(!$str) return false;
        $str=strip_tags($str);
        $unicode=array('a' => 'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ','d' => 'đ','e' => 'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ','i' => 'í|ì|ỉ|ĩ|ị','o' => 'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ','u' => 'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự','y' => 'ý|ỳ|ỷ|ỹ|ỵ','A' => 'Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ','D' => 'Đ','E' => 'É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ','I' => 'Í|Ì|Ỉ|Ĩ|Ị','O' => 'Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ','U' => 'Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự','Y' => 'Ý|Ỳ|Ỷ|Ỹ|Ỵ',);
        foreach($unicode as $nonUnicode => $uni) {
            $str=preg_replace("/($uni)/i",$nonUnicode,$str);
        }
        return $str;
}

- Cách sử dụng hàm này như hàm hash bên trên

echo $this->mcode->stripUnicode('Cách sử dụng hàm');

- Kết quả in ra là cach su dung ham.

- Hàm tạo tên username từ text. Mục đích viết hàm này vì các tên đăng nhập như tychuot, kynhan, duachuot, tuy nhiên phòng ngừa một số trường hợp người dùng nhập tên có dấu, có khoảng trống thì sẽ auto cắt các khoảng trống, cắt các dấu để tạo tên đăng nhập

public function generate_username_from_text($strText) {
        $strText=preg_replace('/[^A-Za-z0-9-]/',' ',$strText);
        $strText=preg_replace('/ +/',' ',$strText);
        $strText=trim($strText);
        $strText=str_replace(' ','',$strText);
        $strText=preg_replace('/-+/','',$strText);
        $strText=preg_replace("/-$/","",$strText);
        return $strText;
}

- Hàm trên chỉ các tác dụng thay thế các khoảng trống, các ký tự đặc biệt để tạo ra hàm tên user hoàn chỉnh phải kết hợp với hàm lọc dấu tiếng việt

public function username($strText) {
        return  strtolower($this->generate_username_from_text($this->stripUnicode($strText)));
}

- Hàm lọc Script trong text, hàm này phòng ngừa một số người dùng chèn script vào gây hại trong web

public function clean($strText) {
        $str=preg_replace('/<script\b[^>]*>(.*?)<\/script>/i', "", $strText);
        return $str;        
}

Như vậy file Mcode.php sau khi thêm các hàm, các function thì nội dung hoàn chỉnh như bên dưới

<?php
class Mcode extends CI_Model {
    function __construct() {
        parent::__construct();
    }
    public function clean($strText) {
        $str=preg_replace('/<script\b[^>]*>(.*?)<\/script>/i', "", $strText);
        return $str;        
    }
    public function hash($text) {
        $str=sha1(md5(sha1($text)));
        return $str;
    }
    public function stripUnicode($str) {
        if(!$str) return false;
        $str=strip_tags($str);
        $unicode=array('a' => 'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ','d' => 'đ','e' => 'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ','i' => 'í|ì|ỉ|ĩ|ị','o' => 'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ','u' => 'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự','y' => 'ý|ỳ|ỷ|ỹ|ỵ','A' => 'Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ','D' => 'Đ','E' => 'É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ','I' => 'Í|Ì|Ỉ|Ĩ|Ị','O' => 'Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ','U' => 'Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự','Y' => 'Ý|Ỳ|Ỷ|Ỹ|Ỵ',);
        foreach($unicode as $nonUnicode => $uni) {
            $str=preg_replace("/($uni)/i",$nonUnicode,$str);
        }
        return $str;
    }
    public function generate_username_from_text($strText) {
        $strText=preg_replace('/[^A-Za-z0-9-]/',' ',$strText);
        $strText=preg_replace('/ +/',' ',$strText);
        $strText=trim($strText);
        $strText=str_replace(' ','',$strText);
        $strText=preg_replace('/-+/','',$strText);
        $strText=preg_replace("/-$/","",$strText);
        return $strText;
    }    
    public function username($strText) {
        return  strtolower($this->generate_username_from_text($this->stripUnicode($strText)));
    }    
}
?>

- Bài sau mình sẽ hướng dẫn các bạn tạo username ứng dụng các hàm models này kỹ hơn