2010-08-13 2 views
13

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

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

+0

Возможные дубликат: См http://stackoverflow.com/questions/1149098/php-codeigniter-how-to-pass-parameters -to-a-model –

ответ

17

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

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

Спасибо! Это была проблема. Я прочитал документацию, но каким-то образом пропустил эту часть :) – Andrei

+0

, которая действительно помогла, желаю, чтобы руководство пользователя упомянул, что этот метод был способом определения параметров (я думал, что это необязательный метод для нескольких параметров). +1 (будет +2, если бы я мог) – Eman

+1

На самом деле, я рекомендую использовать ассоциативный массив для передачи данных в конструктор. Это обеспечивает более читаемый код, упрощает использование опционных аргументов и более совместим со встроенными библиотеками. – user1618143

0

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

+0

Ups ... просто опечатка. Но все равно спасибо :). Ред. – Andrei

0

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

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

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

?> 
Смежные вопросы