2010-08-13 23 views
13

Estoy tratando de implementar una clase que he escrito como biblioteca CodeIgniter.Pasando argumentos al cargar biblioteca CodeIgniter personalizada

De alguna manera no puedo obtener el método load() de CI para pasar múltiples argumentos a la función de constructor de la clase.

Mi clase está diseñada para obtener 3 argumentos, 2 matrices y una cadena opcional.

El constructor se ve algo como esto:

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

La parte pertinente del controlador:

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

Cargando el controlador genera este error:

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

Esto es realmente desconcertante yo. Parece que el primer argumento se envía bien y luego se ahoga en el segundo argumento. Cualquier pista sobre por qué sucede esto será muy apreciada.

+0

duplicado posibles: ver http://stackoverflow.com/questions/1149098/php-codeigniter-how-to-pass-parameters -to-a-model –

Respuesta

17

Es necesario modificar el constructor de la clase para manejar los datos pasados ​​como se describe aquí:

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

¡Gracias! Ese fue el problema. Había leído a través de la documentación pero de alguna manera me salteé esa parte :) – Andrei

+0

que realmente me ayudó, desearía que la guía del usuario hubiera mencionado que ese método era la manera de definir parámetros (pensé que era un método opcional para múltiples parámetros). +1 (haría +2 si pudiera) – Eman

+1

En realidad, recomiendo usar una matriz asociativa para pasar datos al constructor. Esto hace que el código sea más legible, hace que los argumentos opcionales sean más fáciles de usar y más consistentes con las bibliotecas integradas. – user1618143

0

olvidó el $ en array2 al declarar params, haciendo que se pase como una constante que no está definida en lugar de una matriz.

+0

Ups ... solo un error tipográfico. Pero gracias de cualquier manera :). Editado – Andrei

0

Paso de parámetros al inicializar su clase

En la función de carga de bibliotecas no se puede dinámicamente pasar datos como una matriz a través del segundo parámetro y se pasará a su constructor de clase:

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

$ this-> load-> library ('Someclass', $ params); Si utiliza esta función, debe configurar el constructor de la clase a esperar los datos:

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

class Someclass { 

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

?> 
Cuestiones relacionadas