7
votes

Comment transmettre plusieurs paramètres à une bibliothèque dans CodeDigniter?

Je fais une bibliothèque pour Cadedigniter et je souhaite transmettre plusieurs paramètres de types différents (objet PDO, nom d'utilisateur et mot de passe, configurations, etc.).

Je sais que je peux passer une gamme de toutes ces choses, mais cela ne semble pas être la meilleure façon de faire des choses (comme $ params ne peut jamais décrire ce qui est nécessaire) .

Comment puis-je passer plusieurs paramètres à une bibliothèque?

Merci d'avance.


3 commentaires

Je n'ai pas utilisé Codedigniter, donc lorsque vous dites "Bibliothèque" Voulez-vous dire de passer des paramètres lorsque vous instaniez une classe?


Oui, c'est généralement fait avec $ ceci-> Load-> Bibliothèque ('lib_name', $ params) , mais je veux passer plus d'un $ param .


Quel est le problème avec le tableau? $ params = tableau (...)


6 Réponses :


0
votes

Par défaut dans CodeDigniter, vous ne pouvez pas. Vous ne pouvez transmettre qu'un seul paramètre à vos cours de bibliothèque. Comme indiqué avant que Param ne puisse être un tableau contenant tous les autres paramètres et que vous pouvez simplement l'utiliser comme $ param [0], $ param [1] ... . Mais je suis d'accord avec vous, c'est un peu étrange et moche de voir.

Si vous avez PHP5 + Il y a le réflectionclass Cela pourrait vous aider, mais vous devriez éditer le code source du codeigniter et mettre en œuvre cette fonction. La fonction que vous recherchez est réflexclass :: newinstance () que vous pouvez trouver ici .


2 commentaires

Que puis-je faire avec la classe de réflexion?


@Truth, comme indiqué, vous pouvez appeler une nouvelle classe passant des arguments au constructeur. Il suffit de lire la documentation sur réflectionclass :: NewInstance () ici.



1
votes

de mon expérience avec codeigniter, sauf si vous modifiez la classe chargeur pour agir différemment (comme vous le savez peut-être, dans le dossier Application / CORE / Le dossier est l'endroit où vous devez mettre en œuvre vous classe personnalisée) Il n'y a aucun moyen (personne de cela que je connais)

J'utilise de nombreuses bibliothèques externes (surtout API SDKS ou Sparks) et j'aime construire mes propres fichiers de configuration où définir des valeurs qui seront chargées dans des bibliothèques lorsqu'elles les appellent, alors que je dois charger des bibliothèques, je viens de construire un Simple ou multidimensionnel $ params = tableau () en fonction de mes besoins, puis travaillez avec elle à l'intérieur de la bibliothèque.

Donc en bref Réponse, $ Ceci-> Load-> Bibliothèque ('lib_name', $ params) est le seul moyen que je suis au courant.


0 commentaires

7
votes

Il existe plusieurs approches de ce problème particulier. Je vais énumérer (dans l'ordre préféré) façons de le résoudre:

Arguments de réseau associatif: strong> p>

Cette approche est assez flexible, comme l'ordre des paramètres ne 'T Peu importe, et il résout une assez grande plainte dont beaucoup ont avec la manière dont PHP définit les paramètres de fonction. Vous passez simplement dans les paramètres «non par défaut» que vous souhaitez. C'est probablement le moyen le plus "codéigniterish" de le faire, si c'est même une chose. P> xxx pré>

arguments numérotés: strong> p>

Cette approche réplique le paramètre PHP typique paradigme (définit les noms, les commandes et les valeurs par défaut pour tous les paramètres attendus). P>

    // Instantiate the class
    $CI =& get_instance();
    if (isset($config[1])
    {
        // With numeric keys, it makes sense to assume this is
        // is an ordered parameter list
        $rc = new ReflectionClass($name);
        $CI->$classvar = $rc->newInstanceArgs($config);
    }
    elseif ($config !== NULL)
    {
        // Otherwise, the default CI approach is probably good
        $CI->$classvar = new $name($config);
    }
    else
    {
        // With no parameters, it's moot
        $CI->$classvar = new $name;
    }


2 commentaires

Votre est le plus informatif, je me rends, je ne modifierai pas la source de CI car cela pourrait provoquer des problèmes. +1 + V, merci beaucoup :)


Très content que cela ait aidé. Honnêtement, je vais probablement référence à cela moi-même plus tard lorsque j'oublie.



2
votes

On peut éviter la classe de chargeur et instancier des objets directement. AppPPath code> est une constante de codeigniter.

$this->load->library( 'some_class' )
$this->Some_class->do_something();


0 commentaires

-1
votes

C'est le meilleur moyen: Créez un grand tableau

$data1=array('item1','item2','item3');
$arr=array('data1'=>$data1,'data2'=>'item4','data3'=>'item5');//create big array of datas

extract($arr);//convert that to variables again after send to library 
//use that again
print_r($data);
echo $data2;
echo $data3;


0 commentaires

0
votes

Utilisez $ ceci-> upload-> initialiser ($ configupload); après $ ceci-> chargez-> bibliothèque ("télécharger", $ configupload); < / p>


0 commentaires