7

ऐसा करने का कोई तरीका नहीं मिल रहा है, संभवतः क्योंकि ऐसा करने का दूसरा तरीका है?कोडइग्निटर एकाधिक नियंत्रकों का विस्तार?

मेरे कुछ नियंत्रक AdminLayout का विस्तार करते हैं और उनमें से कुछ ModLayout का विस्तार करते हैं लेकिन मुझे लॉग इनइन कंट्रोलर का विस्तार करने के लिए इन पृष्ठों की भी आवश्यकता है।

class Profile extends AdminLayout, LoggedIn { 

हालांकि इसमें अच्छी तरह से ऐसा करने का कोई तरीका नहीं है। क्या आसपास कोई काम है?

+0

कम से कम अपने 'LoggedIn' कार्यक्षमता सेवा परत में रखा जाना चाहिए, नियंत्रक परत पर नहीं। – Flavius

उत्तर

2

PHP एकाधिक विरासत का समर्थन नहीं करता है। आप इसके लिए कोडिग्निटर हेल्पर्स या पुस्तकालयों का उपयोग कर सकते हैं।

http://codeigniter.com/wiki/Simplelogin

25

यह मानते हुए कि आप Codeigniter 2 का उपयोग कर रहे है, इस एक ही फाइल में आप सभी की विस्तारित नियंत्रक कक्षाएं लगाने के द्वारा किया जा सकता है:

पुस्तकालय उदाहरण पर एक नज़र डालें।

/आवेदन में/कोर एक फ़ाइल MY_Controller.php बनाएं जिसका नाम आप सभी जोड़ सकते हैं (मत भूलना लाइन 109 के आसपास config.php में उपवर्ग उपसर्ग जाँच करने के लिए)

यहाँ में आप विस्तार करने के लिए नियंत्रक वर्गों। उदाहरण के लिए;

<?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/ */ 

फिर जब आप सामान्य रूप से अपने नियंत्रक बनाते हैं, तो बस विस्तार करने के लिए बेस नियंत्रक वर्ग चुनें। उदाहरण;

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'); 
     } 
    } 
} 

या

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'); 
     } 
    } 
}