2

私はMVCの基本概念を備えた単純なphp MVCを構築しています

ビュークラスを構築しているときに、コントローラーからビューに変数を渡すことができる単純な関数を構築しようとしました

<?php

class View {
    protected $data = array();

    function __construct() {
        //echo 'this is the view';
    }
    public function assign($variable , $value)
    {
        $this->data[$variable] = $value;
    }

    public function render($name, $noInclude = false)
    {
        extract($this->data);
        if ($noInclude == true) {
            require 'views/' . $name . '.php';    
        }
        else {
            require 'views/header.php';
            require 'views/' . $name . '.php';
            require 'views/footer.php';    
        }
    }


}

私のコントローラークラスでは、このように使用していました

class Index extends Controller {

    function __construct() {
        parent::__construct();
    }

    function index() {
        $this->view->assign('title','welcome here codes');
        $this->view->render('index/index',true);
    }

レンダー関数は正常に動作していますが、ビューから変数を出力しようとすると何も表示されないため、割り当て関数に問題があります

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test Code</title>
</head>
<body>
<? echo $title;?> 
some text here
</body>
</html>

View クラス内の保護された変数を public に変更しようとしましたが、問題には影響せず、コントローラーから変数を出力できません。

4

1 に答える 1

1

View::render 関数内でビューが必要なため、何も表示されません。データにアクセスするには、次のように記述する必要があります。

<?php echo $this->data['title']; ?>

これを避けるには、レンダー関数内でデータ配列から変数を作成する必要があります。私は次のようなことを意味します

foreach($this->data as $key => $value) {
  $$key = $value;
}

注:変数のスコープのため、上記のコードは「抽出」関数内に置くことはできません。

于 2013-01-18T03:10:47.210 に答える