2012-10-10 45 views

Trả lời

13

Nó sẽ phụ thuộc vào hoàn cảnh. Nếu bạn muốn giữ lại dữ liệu trong một thời gian, thì dữ liệu phiên sẽ là cách để đi. Tuy nhiên, nếu bạn chỉ cần sử dụng nó một lần, dữ liệu flash có thể thích hợp hơn.

bước đầu tiên sẽ được khởi tạo thư viện phiên:

$this->load->library('session'); 

Sau đó lưu trữ các thông tin trong dữ liệu flash:

$this->session->set_flashdata('item', $myVar); 

Cuối cùng, trong bộ điều khiển thứ hai, lấy dữ liệu:

$myVar = $this->session->flashdata('item'); 

Rõ ràng điều này có nghĩa là bạn phải khởi tạo lại thư viện phiên từ bộ điều khiển thứ hai, hoặc tạo bộ điều khiển cơ sở của riêng bạn để tải thư viện phiên và có cả hai bộ điều khiển của bạn kế thừa từ bộ điều khiển đó.

+0

tôi không thể truy xuất mục. chuyện gì vậy . – Aditi

+0

@Aditi Có thông báo lỗi không? –

+0

Không có thông báo lỗi là có – Aditi

7

Tôi nghĩ rằng trong codeigniter bạn không thể chuyển biến, giữa hai bộ điều khiển khác nhau. Một cơ chế rõ ràng là sử dụng dữ liệu phiên.

+4

Tôi đồng ý về điều đó. CI có định tuyến cụ thể nơi các bộ điều khiển được truy cập thông qua URI. dữ liệu phiên sẽ hữu ích tại đây $ this-> sessions-> set_userdata ('data', $ data); chuyển hướng ('second_cont.php'); – kjurkovic

7

Ok, đây là một cái gì đó về MVC nhất sẽ dễ dàng quote:

Một Controller là dành đầu vào, một mô hình là cho logic của bạn, và một cái nhìn là để hiển thị.

Bây giờ, nói đúng là bạn không nên muốn gửi dữ liệu từ bộ điều khiển đến bộ điều khiển khác. Tôi không thể nghĩ ra bất kỳ trường hợp nào cần thiết.


Nhưng nếu cần thiết, bạn có thể chỉ cần sử dụng redirect để chuyển hướng đến bộ điều khiển khác.

Cái gì như:

// some first_cont.php code here 
redirect('/second_cont/valuereciever/value1') 


// some second_cont.php code here 
public function valureciever($value){ 
    echo $value; // will output value1 
} 
4

Trong Codeigniter có nhiều cách để chuyển giá trị từ bộ điều khiển này sang bộ điều khiển khác.

Bạn có thể sử dụng phiên mã để phiên truyền dữ liệu từ bộ điều khiển này sang bộ điều khiển khác.

Cho rằng bạn phải đầu tiên bao gồm các thư viện cho phiên

$this->load->library('session'); 

Sau đó, Bạn có thể thiết lập giá trị dữ liệu flash sử dụng tên biến.

// Set flash data 
$this->session->set_flashdata('variable_name', 'Value'); 

Them bạn có thể nhận được giá trị mà bạn muốn bằng cách sử dụng các flashdata phiên CodeIgniter

// Get flash data 
$this->session->flashdata('variable_name'); 

Second Lựa chọn CodeIgniter cho phép bạn chuyển hướng url từ controll với tên điều khiển, tên phương thức và giá trị và sau đó bạn có thể nhận được giá trị trong bộ điều khiển khác.

// Passing the value 
redirect('/another_controller_name/method_name/variable'); 

Sau đó, bạn có thể nhận được giá trị trong điều khiển khác

public function method_name($variable) 
{ 
echo $variable; 
} 

Đó là tất cả ....

+0

Câu trả lời của bạn không thay đổi bất cứ điều gì, nó đã được trả lời ở trên và giống hệt với câu trả lời hiện có. –

+0

@Farhad, tôi không đồng ý. Câu trả lời này cho thấy cả hai cách để vượt qua biến: những người được mô tả bởi Matthew Daly và kalpesh patel cũng như câu trả lời Prasanth. Trong thực tế, tôi không chắc chắn nếu điều này không phải là câu trả lời tốt nhất cho tôi. – Line

+0

nếu người dùng làm mới trang thì sao? biến dữ liệu flash không còn tồn tại nên ... mã sẽ thất bại – Diego

1

Nếu bạn đang sử dụng phiên trong bộ điều khiển đầu tiên sau đó không unset phiên rằng trong bộ điều khiển đầu tiên , thay vào đó, lưu trữ giá trị mà bạn muốn trong bộ điều khiển khác như,

$sess_array = array('value_name1' => 'value1', 'value_name2' => 'value2'); 
$this->session->set_userdata('session_name', $sess_array); 

n tải lại phiên này trong bộ điều khiển khác như

$session_data= $this->session->userdata('session_name'); 
$any_var_name = $session_data['value1']; 
$any_var_name = $session_data['value2']; 

đây là cách bạn có thể vượt qua giá trị từ một bộ điều khiển khác ....

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