2010-08-13 15 views
13

लोड करते समय तर्कों को पास करना मैं कोडइग्निटर लाइब्रेरी के रूप में लिखी गई कक्षा को लागू करने की कोशिश कर रहा हूं।कस्टम कोडइग्निटर लाइब्रेरी

किसी भी तरह से मुझे कक्षा के कन्स्ट्रक्टर फ़ंक्शन में एकाधिक तर्क पारित करने के लिए सीआई की load() विधि नहीं मिल सकती है।

मेरी कक्षा को 3 तर्क, 2 सरणी और एक वैकल्पिक स्ट्रिंग प्राप्त करने के लिए डिज़ाइन किया गया है।

निर्माता इस तरह कुछ हद तक दिखता है:

public function __construct($array, $array,$string=""){ 
/** code **/ 
} 

नियंत्रक से प्रासंगिक हिस्सा:

Message: Missing argument 2 for MyClass::__construct() 

यह वास्तव में puzzling है:

function index(){ 
    $array1 = array('key1'=>'value','key2'=>'value'); 
    $array2 = array('key1'=>'value','key2'=>'value'); 
    $string = "value"; 
    $params = array($array1,$array2,$string); 
    $this->load->library("MyClass",$params); 
} 

नियंत्रक लोड हो रहा है इस त्रुटि उत्पन्न करता है मुझे। ऐसा लगता है कि पहला तर्क ठीक से भेजा जाता है और फिर यह दूसरे तर्क पर चोक करता है। यह क्यों हो रहा है पर कोई सुराग बहुत सराहना की जाएगी।

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/1149098/php-codeigniter-how-to-pass-parameters देखें -to-a-model –

उत्तर

17

आप यहां बताए अनुसार अपनी कक्षा निर्माता पारित कर दिया डेटा को संभालने के लिए संशोधित करने की आवश्यकता:

http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html

public function __construct($params) 
{ 
    $array1 = $params[0]; 
    $array2 = $params[1]; 
    $string = $params[2]; 

    // Rest of the code 
} 
+0

धन्यवाद! वह समस्या थी। मैंने प्रलेखन को पढ़ा था लेकिन किसी भी तरह से उस भाग पर छोड़ दिया गया :) – Andrei

+0

जो वास्तव में मदद करता है, उपयोगकर्ता मार्गदर्शिका की इच्छा है कि यह तरीका पैरामीटर को परिभाषित करने का तरीका था (मैंने सोचा था कि एकाधिक पैरामीटर के लिए एक वैकल्पिक विधि थी)। +1 (यदि मैं कर सकता तो +2 होगा) – Eman

+1

असल में, मैं कन्स्ट्रक्टर में डेटा पास करने के लिए एक एसोसिएटिव सरणी का उपयोग करने की सलाह देता हूं। यह अधिक पठनीय कोड के लिए बनाता है, वैकल्पिक तर्कों का उपयोग करना आसान बनाता है, और अंतर्निर्मित पुस्तकालयों के साथ अधिक संगत है। – user1618143

0

आप पैराम घोषित करते समय सरणी 2 पर $ भूल गए हैं, जिससे इसे एक स्थिर के रूप में पारित किया जा सकता है जिसे किसी सरणी के बजाय परिभाषित नहीं किया गया है।

+0

अप्स ... बस एक टाइपो। लेकिन फिर भी धन्यवाद :)। संपादित। – Andrei

0

पैरामीटर पासिंग जब आपकी कक्षा के

आरंभ किया जा रहा पुस्तकालय लोड हो रहा है समारोह आप गतिशील रूप से कर सकते हैं में दूसरे पैरामीटर के माध्यम से डेटा को सरणी के रूप में पास करें और इसे आपके क्लास कन्स्ट्रक्टर को पास कर दिया जाएगा:

$params = array('type' => 'large', 'color' => 'red'); 

$ यह-> लोड-> लाइब्रेरी ('कुछ क्लास', $ पैराम्स); आप इस सुविधा से आप अपने वर्ग निर्माता की उम्मीद सेट करना होगा का उपयोग करते हैं डेटा:

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

class Someclass { 

    public function __construct($params) 
    { 
     // Do something with $params 
    } 
} 

?>