2010-08-13 36 views
13

Tôi đang cố triển khai lớp tôi đã viết là thư viện CodeIgniter.Truyền đối số khi tải thư viện CodeIgniter tùy chỉnh

Bằng cách nào đó tôi không thể có được phương pháp load() của CI để chuyển nhiều đối số đến hàm tạo hàm của lớp.

Lớp học của tôi được thiết kế để lấy 3 đối số, 2 mảng và một chuỗi tùy chọn.

Các nhà xây dựng có vẻ hơi như thế này:

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

Phần liên quan từ bộ điều khiển:

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

Đang tải bộ điều khiển tạo ra lỗi này:

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

này thực sự là khó hiểu tôi. Dường như đối số đầu tiên được gửi đi tốt và sau đó nó bị nghẹt thở trong đối số thứ hai. Bất kỳ manh mối nào về lý do tại sao điều này đang xảy ra sẽ được đánh giá cao.

+0

có thể trùng lặp: Xem http://stackoverflow.com/questions/1149098/php-codeigniter-how-to-pass-parameters -to-a-model –

Trả lời

17

Bạn cần phải sửa đổi constructor lớp học của bạn để xử lý các dữ liệu thông qua như đã mô tả ở đây:

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

Cảm ơn! Đó là vấn đề. Tôi đã đọc máng tài liệu nhưng bằng cách nào đó bỏ qua phần đó :) – Andrei

+0

thực sự hữu ích, mong muốn hướng dẫn sử dụng đã đề cập rằng phương pháp đó là cách xác định tham số (tôi nghĩ đó là phương pháp tùy chọn cho nhiều tham số). +1 (sẽ +2 nếu tôi có thể) – Eman

+1

Thực ra, tôi khuyên bạn nên sử dụng mảng kết hợp để chuyển dữ liệu vào hàm tạo. Điều này làm cho mã dễ đọc hơn, làm cho các đối số tùy chọn dễ sử dụng hơn và phù hợp hơn với các thư viện tích hợp sẵn. – user1618143

0

bạn đã quên $ trên mảng2 khi khai báo thông số, khiến cho thông số này được truyền dưới dạng hằng số không được xác định thay vì mảng.

+0

Ups ... chỉ là lỗi đánh máy. Nhưng dù gì cũng cảm ơn :). Đã chỉnh sửa. – Andrei

0

Đi qua thông số Khi Khởi Your Class

Trong chức năng tải thư viện bạn có thể tự động chuyển dữ liệu dưới dạng mảng thông qua tham số thứ hai và nó sẽ được chuyển đến hàm tạo lớp của bạn:

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

$ this-> load-> library ('Someclass', $ params); Nếu bạn sử dụng tính năng này bạn phải thiết lập constructor lớp học của bạn để mong đợi dữ liệu:

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

class Someclass { 

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

?> 
Các vấn đề liên quan