我有一個查看器幫助器函數,它可以將主要內容加載在頁腳/頁眉旁邊。當我在主內容視圖中爲變量共享相同名稱的標題加載數組的關鍵字時發生了錯誤/意外行爲 - 爲標題和主要內容加載了相同的數組。加載視圖時CodeIgniter出現意外的行爲
我認爲這是正常的,因爲相同的$data
陣列被髮送到標題和主要內容井(如前所述)。所以這個變量自然會出現在兩個視圖中。但是,那並不完全如此。在將數據發送到標題後,我將$data
變量取消設置,然後在我想將一些數據發送到主視圖時重新創建該變量 - 但問題仍然沒有解決。
我爲這個bug /意外的行爲,一個簡單的例子:
考慮這一觀點,命名爲test
:
<?php
echo $some_data;
而這個控制器:
class Test extends CI_Controller {
function index() {
$data['some_data'] = 'Some data.';
$this->load->view('test', $data);
/*
* Output:
* Some data.
*/
unset($data);
unset($data['some_data']);//Just to make sure it's not PHP's fault.
$this->load->view('test');
/*
* Output:
* Some data.
*
* Even though the $data variable is unsetted AND not passed!
*/
$different_data = array();
$this->load->view('test', $different_data);
/*
* Output:
* Some Data.
*
* Still outputs the same thing, even though
* I'm sending different array(and the $data array is unstted).
*
*/
}
}
注意:整個代碼將輸出Some data.
三次。
來解決這個問題的唯一辦法是發送一個不同的陣列和設置陣列鍵(這是some_data
)到別的東西,將覆蓋舊的。
所以,這是一個錯誤或CodeIgniter的帥哥所做的?
該解決方案是對於簡單的情況(如示例)罰款,但我有動態變量傳遞,所以手動取消它們對我來說效率不高。 – Abdulaziz
或$ this-> load-> vars('some_data',NULL); – Aurel