Передача аргументов при загрузке пользовательской библиотеки CodeIgniter - PullRequest
13 голосов
/ 14 августа 2010

Я пытаюсь реализовать класс, который я написал как библиотеку 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()

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

Ответы [ 3 ]

17 голосов
/ 14 августа 2010

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

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
}
0 голосов
/ 12 октября 2015

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

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

$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
    }
}

?>
0 голосов
/ 14 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...