フッター/ヘッダーと一緒にメインコンテンツをロードするビューアーヘルパー関数があります。メイン コンテンツ ビューの変数に同じ名前を共有するヘッダーの配列のキーをロードすると、バグ/予期しない動作が発生しました。ヘッダーとメイン コンテンツの両方に同じ配列がロードされます。
$data
同じ配列がヘッダーとメインコンテンツにも送信されたので(前述のように)、それは正常だと思いました。したがって、変数は当然両方のビューに存在します。でもまあ、そうではなかった。データをヘッダーに送信した後に変数の設定を解除$data
し、メイン ビューにデータを送信するときに変数を再作成しましたが、それでも問題は修正されません。
このバグ/予期しない動作の簡単な例を作成しました。
という名前のこのビューを検討してください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.
で 3 回出力されます。
この問題を解決する唯一の方法は、別の配列を送信し、配列キー ( some_data
) を古い配列をオーバーライドする別のものに設定することです。
では、これはバグなのか、それとも CodeIgniter の連中が作ったものなのか?