/ / Codeigniter / Comments (2)

Xây dựng main controller CodeIgniter

Chắc hẳn các bạn đã biết tất cả controller trong codeigniter đều phải được kế thừa từ lớp CI_Controller.Trong những yêu thực tế thì việc chúng ta cần xây dựng 1 dạng controller chính nhằm xử lý các dữ liệu chung của tất cả các controller khác.Ví dụ như truy cập vào trang admin chả lẽ chúng ta cứ kiểm tra admin đã đăng nhập hay chưa ở tất cả các controller trong admin,như vậy thật bất tiện phải không nào.Nếu chúng ta xây dựng 1 main controller thì lúc nàychỉ cần kiểm tra duy nhất tại main controller này mà thôi.Mình khuyên các bạn khuyên các bạn không lên can thiệp trực tiếp vào thư viện của CI,mà chúng ta chỉ kế thừa hoặc ghi đè(Overwrite) dữ liệu thôi.Và trong CI cũng hỗ trợ chúng ta làm việc này,sau download bộ thư viện của CI về các bạn thấy trong thư mục application có thư mục core chứ?đây chính là nơi chúng ta có thể viết Overwrite lại bộ core codeigniter.

– Để có thể nghiên cứu sang bài này thì các bạn cần có các kiến thức cơ bản sau:

  1. Tổng quan về CodeIgniter framework
  2. Controller và URLs trong CodeIgniter framework

Hướng dẫn cách viết core trong CI
– Các bạn cần truy cập vào thư mục application/core đây chính là nơi ta viết ra core riêng của mình.Trong giới hạn bài này mình sẽ hướng dẫn các bạn xây dựng controller chính xư lý các dữ liệu chung của website.
– Tất cả file có phần tiền tố là MY_.Mặc định trong CI các file viết trong core sẽ có tiền tố là MY_ đó chính là phần cấu hình trong file application/config.php,nếu các bạn không muốn sử dụng tiền tố mà MY_ thì có thể tìm tới đoạn cấu hình để sửa ví dụ:

$config['subclass_prefix'] = 'MY_';

+ Ban đầu các bạn tạo file main controller có tên là MY_Controller.php với nội dung sau:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
	// Bien luu thong tin gui den view
	var $data = array();
}

Vơi đoạn code trên chúng ta đang tạo 1 class kế thừa từ CI_Controller,và biến $data để chứa các tham số gửi sang view.Như vậy tất cả các controller của chúng ta lúc này hoàn toàn có thể kế thừa từ lớp MY_Controller này rồi.Giờ công việc của chúng ta thử xem trong lớp MY_Controller này cần xử lý nhưng dữ liệu nào?Trước khi vào phần nội dung mình muốn cho các bạn xem cấu trúc thư mục của mình như sau:

Cấu trúc thư mục core và controller

Cấu trúc thư mục core và controller

Với hình trên thì các bạn thấy thư mục admin chính là thư mục chứa toàn bộ controller xử lý dữ liệu trong trang quản trị.Chúng ta sẽ xây dựng hàm khởi tạo trong lớp MY_Controller như sau:

        /**
	 * Ham khoi dong
	 */
	function __construct()
	{
		//kế thừa từ CI_Controller
		parent::__construct();

		// Xu ly controller
		$controller = $this->uri->segment(1);
		$controller = strtolower($controller);
		//kiểm tra xem trang hiện tại đang truy cập
		switch ($controller)
		{
			//Nếu đang truy cập vào trang Admin
			case 'admin':
			{
				//load các file sử dụng nhiều cho trang admin
				//kiểm tra admin đăng nhập hay chưa
				//kiểm tra quyền của admin
				//....
				break;
			}

			//Trang chủ
			default:
			{
				//load các file sử dụng nhiều cho trang chủ
				//Xử lý ngôn ngữ
				//Xử lý tiền tệ
				//....
				break;
			}
		}

	}

Mình xin giải thích chút về đoạn code trên nhé:
+ Tại sao mình lại viết code xử lý trong hàm khởi tạo?Lý do là toàn bộ controller của chúng ta lúc này đang kế thừa từ lớp MY_Controller lên khi 1 controller được triệu gọi cũng là lúc hàm khởi tạo này được thực hiện.
+ Dòng parent::__construct(); là dòng code kế thừa từ lớp khở tạo của CI_Controller nếu các bạn không có hàm này thì sẽ báo lỗi ngay do tính chất ghi đè.
+ Dòng code $this->uri->segment(1) là dòng mình lấy ra phân đoạn đầu tiên trên link url,các bạn có thể xem lại bài này để hiểu rõ hơn về chức năng này
+ Lúc này mình kiểm tra xem trang đang truy cập có phải đang truy cập vào thư mục admin không,nếu đang truy cập vào trang quản trị lúc này chúng ta sẽ viết code xử lý như kiểm tra đã đăng nhập chưa,kiểm tra phân quyền…và có thể tải những file model,helper,library hay sử dụng trong admin.Còn nếu không là đang truy cập vào trang chủ,tại đây chúng ta có thể xử lý các dữ liệu chung cho tất cả các trang ở ngoài như ngôn ngữ,tiền tệ…hoặc có thể tải những file model,helper,library hay sử dụng trong trang chủ.
– Và toạn bộ file MY_Controller của chúng ta lúc này sẽ như sau:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
	// Bien luu thong tin gui den view
	var $data = array();

	/**
	 * Ham khoi dong
	 */
	function __construct()
	{
		//kế thừa từ CI_Controller
		parent::__construct();

		// Xu ly controller
		$controller = $this->uri->segment(1);
		$controller = strtolower($controller);

		switch ($controller)
		{
			//Nếu đang truy cập vào trang Admin
			case 'admin':
			{
				//load các file sử dụng nhiều cho trang admin
				//kiểm tra admin đăng nhập hay chưa
				//kiểm tra quyền của admin
				//....
				break;
			}

			//Trang chủ
			default:
			{
				//load các file sử dụng nhiều cho trang chủ
				//Xử lý ngôn ngữ
				//Xử lý tiền tệ
				//....
				break;
			}
		}

	}
}


Xem video hướng dẫn chi tiết

Kết thúc bài viết: Qua bài này các bạn thấy khi chúng ta xây dựng ra 1 main controller riêng như thế này sẽ giúp cho code của chúng ta ngắn gọn và dễ quản lý cũng như xử lý hơn rất nhiều.Dựa vào bài này các bạn hoàn toàn xây dựng riêng 1 main controller cho riêng mình và xư lý những dữ liệu cho phù hợp với website của mình.Sang bài sau mình sẽ hướng dẫn các bạn xây dựng main Model CodeIgniter cho riêng mình.



09/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. Người dùng says:
     /  Reply

    Cho mình hỏi trong folder controller của bạn
    làm sao để tạo folder admin chứa những file controller cho quản lý trang admin .
    khi tạo folder admin đó thì phải cấu hình như thế nào để khi mình load vào trang quản trị thì nó chạy đúng
    ví dụ :
    domain.com/controller/action
    như thế này thì nó chạy bth nhưng khi mình bỏ 1 file controller vào 1 folder admin trong hình của bạn thì nó ko chạy đc

    • Hoàng văn tuyền says:
       /  Reply

      Bạn truy cập vào controller trong admin như bình thường thôi ví dụ: domain.com/admin/product/add

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