私のビューは、特定の変数がそれらを呼び出すコントローラーによって定義されることを期待しています。そのため、拡張する独自のコントローラーを作成しました。このコントローラーは、次に拡張しCI_Controller
ます。
class MainController extends CI_Controller{
static protected $data_bundle;
/**
All classes that will extend MainController should have their own constructors
calling the constructor of MainController.
*/
public function __construct(){
parent::__construct();
$data_bundle["title"] = "";
$data_bundle["content"] = "";
$data_bundle["stylesheets"] = array();
$data_bundle["scripts"] = array();
$data_bundle["echo_content"] = true;
}
}
したがって、たとえば、プレーンページのコントローラーを次のように定義できます。
class PlainPage extends MainController{
public function __construct(){
parent::__construct()
}
public function page(){
parent::$data_bundle["title"] = "Plain Page"
parent::$data_bundle["content"] = "The quick brown fox jumps over the lazy dog."
$this->load->view("mainview", parent::$data_bundle);
}
}
次に、にmainview.php
、次のコードがあります。
<?php
foreach($stylesheets as $style){
echo '<link rel="stylesheet" type="text/css" href="css/$style" />"';
}
?>
<?php
foreach($scripts as $script){
echo '<script type="text/javascript" src="scripts/$script"></script>"';
}
?>
しかし、次のエラーが発生します。
Message: Undefined variable: {stylesheets|scripts}
Message: Invalid argument supplied for foreach()
parent::__construct()
呼び出されたときに$data_bundle
配列が初期化されているはずだったのではないですか?変数が未定義であるとCI/PHPが文句を言うのはなぜですか?