NTM Solutions

Facebook Youtube Google+

Thứ Sáu, 23 tháng 11, 2018

Tự học CodeIgniter-Bài 05-Models

#hoccodeigniter

Các Models là tùy chọn có sẵn cho những ai muốn hướng đến dùng mô hình MVC.


Nội dung bài viết:
·         Model là gì?
·         Giải phẫu 01 Model
·         Tải Model
·         Tự động tải Models
·         Kết nối cơ sở dữ liệu



Models là các lớp PHP được thiết kế để làm việc với thông tin trong cơ sở dữ liệu. Ví dụ ta dùng CodeIgniter để xây dựng 01 trang blog. Bạn có thể tạo 01 lớp model chứa các hàm dùng chèn, cập nhật, và nhận dữ liệu của blog. Sau đây là 01 ví dụ về 01 lớp model:
class Blog_model extends CI_Model {

        public $title;

        public $content;

        public $date;


        public function get_last_ten_entries()

        {
                $query = $this->db->get('entries', 10);
                return $query->result();
        }

        public function insert_entry()

        {

                $this->title    = $_POST['title']; // xem ghi chú phía dưới

                $this->content  = $_POST['content'];

                $this->date     = time();

                $this->db->insert('entries', $this);

        }



        public function update_entry()
        {
                $this->title    = $_POST['title'];
                $this->content  = $_POST['content'];
                $this->date     = time();
                $this->db->update('entries', $this, array('id' => $_POST['id']));
        }
}

Ghi chú
+Các phương thức trong ví dụ trên dùng nằm trong bộ các phương thức xử lý cơ sở dữ liệu Query Builder
+Để cho đơn giản hóa, trong ví dụ trên chúng ta dùng $_POST trực tiếp. Điều này là không nên, tốt hơn hết là chúng ta nên dùng Thư Viện Input dạng như vầy: $this->input->post('title').


Các lớp Model được lưu ở thư mục application/models/ . Chúng có thể được tổ chức lại kiểu phân cấp thư mục.
Kiểu khai báo của 01 lớp model là như vầy:
class Ten_model extends CI_Model {

}

Ten_model  chính là tên lớp của bạn. Tên lớp phải có Hoa đầu từ , các từ còn lại viết thường. Và 01 điều nữa là lớp của bạn phải kế thừa từ lớp Model cơ sở của CodeIgniter.

Tên tập tin phải trùng với tên lớp. Lấy ví dụ lớp của bạn như vầy:
class User_model extends CI_Model {

}
Tên tập tin sẽ như vầy:
application/models/User_model.php

Các models của bạn thông thường sẽ được tải và được gọi từ trong các phương thức controller. Để tải 01 model , ta dùng phương thức sau:
$this->load->model('ten_model');

Nếu model của bạn đặt trong 01 thư mục con->đặt tên thư mục con chứa model kèm theo tên model. Ví dụ nếu bạn có 01 model tại thư mục application/models/blog/Queries.php bạn sẽ tải nó bằng câu lệnh như vầy:
$this->load->model('blog/queries');

Khi đã tải rồi, bạn sẽ truy cập các phương thức trong model bằng cách sử dụng 01 đối tượng với tên trùng tên lớp của bạn:
$this->load->model('ten_model');

$this->model_name->method();

Nếu bạn muốn gắn model của bạn với 01 tên đối tượng khác bạn có thể xác định lại thông qua tham số thứ 02 khi trong phương thức tải model:
$this->load->model('ten_model', 'foobar');

$this->foobar->method();

Đây là ví dụ 01 controller tải 01 model, sau đó đưa lên view:
class Blog_controller extends CI_Controller {

        public function blog()
        {
                $this->load->model('blog_model');

                $data['query'] = $this->blog->get_last_ten_entries();
                $this->load->view('blog', $data);

        }
}


Nếu bạn nhận ra rằng mình cần 01 model riêng biệt xuyên suốt ứng dụng, bạn có thể bảo CodeIgniter tự động tải model này trong qua trình hệ thống tiến hành khởi tạo. Để làm điều này ta vào đây: application/config/autoload.php và thêm model vào mảng autoload.


Khi 01 model được tải nó KHÔNG kết nối tự động đến cơ sở dữ liệu. Các tùy chọn kết nối sau đã có sẵn:
·         Bạn có thể kết nối bằng cách dùng các phương thức xử lý cơ sở dữ liệu tiêu chuẩn được mô tả trong: user_guide/database/connecting.html , không phải nằm trong lớp Controller và cũng không nằm trong lớp Model.
·         Bạn có thể bảo model tải phương thức auto-connect bằng cách truyền giá trị TRUE (boolean) thông qua tham số thứ 3, và các thiết lập kết nối đã định sẵn trong tập tin cấu hình cơ sở dữ liệu sẽ được dung:
$this->load->model('ten_model', '', TRUE);

·         Bạn có thể truyền thủ công các thiết lập cơ sở dữ liệu thông qua tham số thứ 03 khi dùng phương thức tải model:
$config['hostname'] = 'localhost';
$config['username'] = 'myusername';
$config['password'] = 'mypassword';
$config['database'] = 'mydatabase';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;

$this->load->model('ten_model', '', $config);

+Các tập tin đã tạo trong bài viết này:
·         application/models/Blog_model.php

·         application/controllers/Blog_controller.php
+Các tập tin đã sửa trong bài viết này:
·         application/config/autoload.php

Nếu vẫn chưa rõ các bạn xem thêm video clip sau:


By #tiensim

Nguồn: User Guide – General Topics