2010-08-13 4 views
13

J'essaie d'implémenter une classe que j'ai écrite en tant que bibliothèque CodeIgniter.Passage d'arguments lors du chargement de la bibliothèque CodeIgniter personnalisée

D'une manière ou d'une autre, je ne peux pas obtenir la méthode load() de CI pour passer plusieurs arguments à la fonction constructeur de la classe.

Ma classe est conçue pour obtenir 3 arguments, 2 tableaux et une chaîne optionnelle.

Le constructeur ressemble un peu à ceci:

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

La partie pertinente du contrôleur:

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

Chargement du contrôleur génère cette erreur:

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

Ce qui est vraiment déroutante moi. Il semble que le premier argument est bien envoyé, puis il étouffe le deuxième argument. Tous les indices sur la cause de ce phénomène seront grandement appréciés.

+0

Possible en double: Voir http://stackoverflow.com/questions/1149098/php-codeigniter-how-to-pass-parameters -to-a-model –

Répondre

17

Vous devez modifier votre constructeur de classe pour gérer les données transmises comme décrit ici:

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

Merci! C'était le problème. J'avais lu la documentation mais en quelque sorte ignoré cette partie :) – Andrei

+0

qui a vraiment aidé, souhaite que le guide de l'utilisateur aurait mentionné que cette méthode était la façon de définir les paramètres (je pensais que c'était une méthode optionnelle pour plusieurs paramètres). +1 (+2 si je le pouvais) – Eman

+1

En fait, je recommande d'utiliser un tableau associatif pour passer des données dans le constructeur. Cela rend le code plus lisible, facilite l'utilisation des arguments facultatifs et est plus cohérent avec les bibliothèques intégrées. – user1618143

0

Vous avez oublié le $ sur tableau2 lors de la déclaration des paramètres, ce qui a pour effet de le faire passer comme une constante qui n'est pas définie à la place d'un tableau.

+0

Ups ... juste une faute de frappe. Mais merci quand même :). Édité. – Andrei

0

passage de paramètres lors de l'initialisation de votre classe

Dans la fonction de chargement de la bibliothèque, vous pouvez dynamiquement Transmettez les données en tant que tableau via le second paramètre et elles seront transmises à votre constructeur de classe:

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

$ this-> load-> library ('Someclass', $ params); Si vous utilisez cette fonction, vous devez configurer votre constructeur de classe pour attendre des données:

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

class Someclass { 

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

?> 
Questions connexes