1

表示する他のphp「テンプレート」ファイルを含めることができるphpクラスを構築しようとしています。呼び出し元のスコープ内にあるすべての変数を、インクルード ファイルで使用できるようにしたいと考えています。ここに問題があります。コードを DRY に保つために、実際のインクルードをヘルパー メソッドに渡したいのです。これが私がこれまでに持っているものです:

/* TemplateLoader.php */
class TemplateLoader {
  public function foo() {
    $var = "FOO!";
    //Works
    include 'template.php';
  }

  public function bar() {
    $var = "BAR!";
    //Doesn't work
    $this->render("template");
  }

  private function render( $name ) {
    include $name . '.php';
  }
}

/* template.php */
<?php echo $var; ?>

私の質問は、ヘルパーメソッドを使用して実際に「重労働」を実行しながら、テンプレートを元のメソッドに直接含めるという動作をどのように達成できますか? あなたが与えることができるどんな助けにも本当に感謝します!

4

1 に答える 1

2

これが最初に頭に浮かんだことです-私はそれが好きすぎるかどうかはわかりませんが、一般的な代替手段はわかりません. これにより、現在のすべての変数が でキャプチャされ、それらが編集されているget_defined_vars()に渡され、インクルード ファイルからアクセスできるようになります。render()extract()

get_defined_vars()からの戻り値をに渡す前にフィルター処理することもできますがrender()、作業する必要があります。

public function bar() {
    $var = "BAR!";
    $this->render("template", get_defined_vars());
}

private function render( $name, &$vars) {
    extract( $vars);
    include $name . '.php';
}

get_defined_vars()に渡す前にからの戻り値をフィルタリングすることもできますが、render()うまくいくはずです。

于 2012-06-28T23:48:50.427 に答える