2009-10-26 14 views
10

मेरी सीआई प्रणाली \ पुस्तकालय निर्देशिका में मेरे पास DD_Controller.php नामक एक नई कक्षा है। इस फ़ाइल में इस तरह दिखता है:मैं कोड इग्निटर नियंत्रक वर्ग कैसे बढ़ा सकता हूं?

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class DD_Controller extends Controller 
{ 
    protected $ddauthentication; 


    function __construct() 
    {   
     parent::Controller(); 
     $this->ddauthentication = "Authenticated"; 
    } 
} 
?> 

मेरा आवेदन नियंत्रक इस तरह परिभाषित किया गया है:

class Inquiry extends DD_Controller 
{...} 

पूछताछ वर्ग ठीक काम करता है जब मैं नियंत्रक का विस्तार है, लेकिन मैं एक

Fatal error: Class 'DD_Controller' not found in C:\development\localhost\applications\inquiry\controllers\inquiry.php on line 4

जब मिलता है मैं डीडी_Cंट्रोलर का विस्तार करता हूं। कॉन्फ़िगरेशन फ़ाइल में मेरे पास इस तरह के उपसर्ग को परिभाषित किया गया है:

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

मुझे क्या याद आ रहा है?

TIA

उत्तर

4

DD_Controller.php में होना चाहिए/सिस्टम/आवेदन/पुस्तकालयों/

यदि आप एकाधिक ऐप्स के लिए एक ही सीआई उपयोग कर रहे हैं, और आप उन सब को सक्षम होना चाहते हैं उनके नियंत्रक फैली करने के लिए अपने कस्टम एक के लिए आप उसी फ़ाइल में बेस कंट्रोलर क्लास का विस्तार कर सकते हैं।

प्रणाली/पुस्तकालयों में/Controller.php नियंत्रक वर्ग नीचे:

class Home extends Mega_Controller { 
    .... 

विस्तारित नियंत्रक वर्ग के बाद से:

class Mega_Controller extends Controller { 
    function Mega_Controller() 
    { 
     parent::Controller(); 
     // anything you want to do in every controller, ye shall perform here. 
    } 
} 

तो फिर आप अपने एप्लिकेशन नियंत्रकों में यह करने के लिए सक्षम हो जाएगा आपने बनाया होगा उपलब्ध होगा। मुझे लगता है कि बेस नियंत्रक को ओवरराइट करना बेहतर है, लेकिन यह भी काम करेगा।

+0

* करता है कि काम * - धन्यवाद। लेकिन यह वह नहीं है जिसे हम ढूंढ रहे हैं। अगर हम एक एकल ऐप वातावरण में थे - आपका समाधान सही होगा। हालांकि हम चाहते हैं कि हमारे सभी ऐप्स समान प्राथमिक आधार नियंत्रक साझा करें। सिस्टम/Controller.php बदलने की कमी - क्या यह किया जा सकता है? – ChronoFish

+0

एलओएल - यह वही समाधान है जो मैं साथ आया था। यह सबसे कम प्रभाव प्रतीत होता है - नियंत्रक पर कोई कोड परिवर्तन नहीं, फ़ाइल में सीमित परिवर्तन, और यह सभी ऐप्स में उपलब्ध है। आपकी मदद के लिए धन्यवाद! – ChronoFish

4

मैं कोडइग्निटर कोर फ़ाइलों को "क्रैकिंग" से बचने की सलाह देता हूं। बेहतर अपनी मूल विस्तार संभावनाओं का उपयोग करें और उनमें फिट होने का प्रयास करें।

वही नियम मैं किसी भी PHP पुस्तकालय/सीएमएस के लिए अनुशंसा करता हूं। इस नियम के कुछ कारण हैं: - बिना किसी जानकारी के quiclky अपग्रेड करने की क्षमता हजारों नोट्स जहां कोर फाइलों में और कैसे क्रैक किया गया था; - पोर्टेबिलिटी; - आपके कोड को साझा करने की संभावना - उदाहरण के लिए, यह ज़रूरत के मामले में आप और आपके दोस्तों दोनों द्वारा उपयोग योग्य होगा, और इससे उन्हें आपकी लाइब्रेरी को अद्यतित रखने में मदद मिलेगी।

दूसरे शब्दों में, यह अधिक पेशेवर है और यह भविष्य में उपयोगिता, पोर्टेबिलिटी और अद्यतन आवेदन संभावना द्वारा भविष्य में आपको भुगतान करता है।

अपने व्यक्तिगत सवाल के बारे में ...

मेरे लिए, वहाँ सब कुछ आप देशी CodeIgniter नियंत्रक बढ़ाने की जरूरत के साथ अपने स्वयं पुस्तकालय बनाने के लिए बुरा कुछ भी नहीं है, तो नियंत्रक निर्माता इस लाइब्रेरी लोड और आप कर रहे हैं। बेहतर उपयोगिता बनाने के लिए एकमात्र चीज है अपनी लाइब्रेरी को संक्षिप्त नाम देना।

इस तरह आप भी आप अलग-अलग टुकड़ों में की जरूरत है और अलग पुस्तकालयों में डाल विभाजित कर सकते हैं: WebFeatures AdminFeatures आदि

फिर आप बस अपने नियंत्रक के कन्स्ट्रक्टर में आवश्यक पुस्तकालयों को लोड करते हैं और आप कर चुके हैं।

पीएस मुझे पता है कि प्रस्तावित तरीका "सही" ओओपी अवधारणा में फिट नहीं है, लेकिन साथ ही आपको उपयोग की जाने वाली पुस्तकालयों की अखंडता को कभी भी नहीं भूलना चाहिए।

उपरोक्त सबकुछ पेशेवर वेब विकास में मेरे 7-वर्ष के अनुभव का सिर्फ एक और दृश्य है, इसलिए मुझे आशा है कि अगर यह पालन न करें, तो कम से कम ध्यान में रखना उपयोगी होगा।

सादर, एंटोन

5

यह एक बेहतर तरीका है। निम्न निर्देशिका में

  1. जाओ: निम्न कार्य करें your_ci_app/application/core/ और एक php MY_Controller.php बुलाया फ़ाइल बनाने आपने अभी बनाया इस फाइल (इस फ़ाइल हो जाएगा, जहां अपने शीर्ष माता पिता कक्षाएं निवास करेंगे)
  2. खोलें और जोड़ें इसलिए की तरह अपने कई वर्गों,:

    class Admin_Parent extends CI_Controller { 
        public function __construct() { 
         parent::__construct(); 
        } 
    
        public function test() { 
         var_dump("from Admin_Parent"); 
        } 
    } 
    
    class User_Parent extends CI_Controller { 
    
        public function __construct() { 
         parent::__construct(); 
        } 
    
        public function test(){ 
         var_dump("from User_Parent"); 
        } 
    
    } 
    
  3. इस निर्देशिका your_ci_app/application/controllers/ के तहत अपने बच्चों नियंत्रक बनाएँ। मैं फोन करेगा यह adminchild.php

  4. ओपन adminchild.php और अपने नियंत्रक कोड बनाने के लिए, तो जैसे माता-पिता क्लास के नाम का विस्तार करने, सुनिश्चित करें:

    class Adminchild extends Admin_Parent { 
    
        function __construct() { 
         parent::__construct(); 
        } 
    
        function test() { 
         parent::test(); 
        } 
    
    } 
    
संबंधित मुद्दे