7

Không thể tìm ra cách để làm điều này, có thể vì có cách khác để làm điều này?CodeIgniter Mở rộng nhiều bộ điều khiển?

Một số bộ điều khiển của tôi mở rộng AdminLayout và một số người trong số họ mở rộng ModLayout nhưng tôi cũng cần các trang này để mở rộng Bộ điều khiển LoggedIn.

class Profile extends AdminLayout, LoggedIn { 

Tuy nhiên, không có cách nào để làm điều này một cách độc đáo. Có cách giải quyết nào không?

+0

Ít nhất 'chức năng LoggedIn' của bạn nên được đặt ở tầng dịch vụ, không phải ở lớp điều khiển. – Flavius

Trả lời

2

PHP không hỗ trợ đa kế thừa. Bạn có thể sử dụng trình trợ giúp hoặc thư viện Codeigniter cho việc này.

Hãy nhìn vào các ví dụ thư viện:

http://codeigniter.com/wiki/Simplelogin

25

Giả sử rằng bạn đang sử dụng CodeIgniter 2, điều này có thể được thực hiện bằng cách đặt tất cả các bạn lớp điều khiển mở rộng trong cùng một tập tin.

Trong /application/lõi tạo ra một tập tin gọi là MY_Controller.php (đừng quên kiểm tra tiền tố phân lớp trong config.php xung quanh dòng 109)

Tại đây bạn có thể thêm tất cả bạn điều khiển các lớp để mở rộng. Ví dụ;

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 
/** 
* MY_Controller Class 
* 
* 
* @package Project Name 
* @subpackage Controllers 
*/ 
class MY_Controller extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->form_validation->set_error_delimiters('<div class="form-error">', '</div>'); 
    } 
} 

class LoggedIn extends MY_Controller { 

    public function __construct() { 
     parent::__construct(); 
     if (is_logged_in() == FALSE) { 
      $this->session->set_userdata('return_to', uri_string()); 
      $this->session->set_flashdata('message', 'You need to log in.'); 
      redirect('/home'); 
     } 
    } 
} 

class AdminLayout extends LoggedIn { 

    public function __construct() { 
     parent::__construct(); 
     // do something 
    } 
} 

class ModLayout extends LoggedIn { 

    public function __construct() { 
     parent::__construct(); 
     // do something 
    } 
} 

/* End of file */ 
/* Location: ./application/core/ */ 

Sau đó, khi bạn tạo bộ điều khiển như bình thường, chỉ cần chọn lớp bộ điều khiển cơ sở để mở rộng. Thí dụ;

class Foo extends AdminLayout { 

    public function __construct() { 
     parent::__construct(); 
     if (is_logged_in() == FALSE) { 
      $this->session->set_userdata('return_to', uri_string()); 
      $this->session->set_flashdata('message', 'You need to log in.'); 
      redirect('/home'); 
     } 
    } 
} 

hoặc

class Bar extends ModLayout { 

    public function __construct() { 
     parent::__construct(); 
     if (is_logged_in() == FALSE) { 
      $this->session->set_userdata('return_to', uri_string()); 
      $this->session->set_flashdata('message', 'You need to log in.'); 
      redirect('/home'); 
     } 
    } 
} 
Các vấn đề liên quan