Передача аргументов при загрузке пользовательской библиотеки CodeIgniter

Я пытаюсь реализовать класс, который я написал, как библиотеку CodeIgniter.

Почему-то я не могу заставить метод CI load() передавать несколько аргументов функции конструктора класса.

Мой класс предназначен для получения 3 аргументов, 2 массивов и одной необязательной строки.

Конструктор выглядит примерно так:

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

Соответствующая часть от контроллера:

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

Загрузка контроллера выдает эту ошибку:

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

Это меня действительно озадачивает. Кажется, что первый аргумент отправляется нормально, а затем он задыхается от второго аргумента. Любые подсказки о том, почему это происходит, будут очень признательны.


person Andrei    schedule 13.08.2010    source источник
comment
Возможный дубликат: см. stackoverflow.com/questions/1149098/   -  person Jimithus    schedule 14.08.2010


Ответы (3)


Вам нужно изменить конструктор класса для обработки переданных данных, как описано здесь:

https://www.codeigniter.com/user_guide/general/creating_libraries.html

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

    // Rest of the code
}
person spidEY    schedule 14.08.2010
comment
На самом деле я рекомендую использовать ассоциативный массив для передачи данных в конструктор. Это делает код более читаемым, упрощает использование необязательных аргументов и лучше согласуется со встроенными библиотеками. - person user1618143; 18.11.2013
comment
ссылка недействительна, должна быть ellislab.com/codeigniter/user-guide/ общие/ сегодня - person Tom; 30.01.2014

вы забыли $ в массиве2 при объявлении параметров, в результате чего он был передан как константа, которая не определена, а не как массив.

person GSto    schedule 13.08.2010

Передача параметров при инициализации вашего класса

В функции загрузки библиотеки вы можете динамически передавать данные в виде массива через второй параметр, и они будут переданы вашему конструктору класса:

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

$this->load->library('Someclass', $params); Если вы используете эту функцию, вы должны настроить конструктор класса на получение данных:

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

class Someclass {

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

?>
person Won Jun Bae    schedule 12.10.2015