0

ビューをロードするメソッドを含むクラスがあります。これは完璧に機能し、ページは正しく読み込まれます! 私が抱えている問題は、メソッドが現在読み込もうとしているビューに変数を渡す方法がわからないことです。ページに変数を渡すにはどうすればよいですか? 現在のコードを操作してこれを機能させる方法はありますか? それとも、まったく逆の方向に進んでいますか?

コントローラ クラス:

<?php
    class Controller {

        private $args = array();

        public function view($page, $args = null) {

            if ($args !== null) {
                $this->args = $args;
                extract($this->args);
            }

            $page = VIEWS . $page . '.php';
            $template = $this->getTemplate($page);

            echo $template;
        }

        private function getTemplate($file) {
            ob_start();
            include($file);
            $template = ob_get_contents();
            ob_end_clean();
            return $template;
        }
    }
    ?>

コントローラ:

<?php
    class Page extends Controller {

        public function person($age) {
            $data['age'] = $age;
            $this->view('person', $data);
        }

    }
?>

内容を見る:

</h1>My name is Dennis. My age is: <?php echo $age; ?></h1>

最終結果は、未定義の変数 ($age) です。

4

4 に答える 4

3

で抽出した変数view()は では使用できませんgetTemplate()。違う範囲です。代わりに、レンダリングを行うのと同じメソッドでそれらを抽出する必要があります。

また、そこにあるのは MVC ビューではありません。それはただのテンプレートです。MVC のビューは、UI ロジックを担当するインスタンスです。モデルレイヤーから必要な情報を要求し、応答が単なる HTTP ロケーションヘッダーでない場合は、複数のテンプレートを使用して HTML を作成する必要があります。

于 2013-02-01T15:13:58.967 に答える
1

これを試して:

</h1>My name is Dennis. My age is: <?php echo $data['age']; ?></h1>
于 2013-02-01T15:13:05.623 に答える
0

テンプレートを含める場所とは異なる方法で変数を抽出します。テンプレートでプレーン変数を使用する場合は、それらが同じスコープで抽出されていることを確認してください。

于 2013-02-01T15:13:31.503 に答える