3

extract() 関数を使用して、コントローラーに割り当てられたすべての変数をテンプレートに抽出したいと考えています。簡単な例は次のとおりです。

  private function render() {
        extract($this->controller_vars);
        require_once("layout.php");
  }

問題は、私のlayout.php内で、ファイルを「インクルード」する他のメソッドを呼び出していることですが、より重要なことに、レイアウト内に正しいアクション/ビューを表示しています。

  // This method is called where I want to display the "content" page:
  public function display_action() {
        require_once("selected_action.php");
  }

したがって、layout.php 内の抽出された変数に効果的にアクセスできますが、ビュー/アクションは同じコントローラーのメソッドを介して含まれているためアクセスできません。

抽出された変数にグローバルアクセスを与えることができる回避策や、おそらく私の問題に対する別の解決策はありますか?

追加情報:

上記のコードは、ビュー クラスのメソッドの 2 つの「骨抜き」バージョンです。

  class views {

        private function render() {
              extract($this->controller_vars);
              require_once("layout.php");
        }


        public function display_action() {
              require_once("selected_action.php");
        }

  }

layout.php ファイルで、次のような呼び出しを行います。

  <div id="content_area">
        $this->display_action();
  </div>

もっともっともっと

現時点では、$this->controller_vars というビュー クラスの配列プロパティによってこれらの変数にアクセスできるので、ユーザーのリストを割り当てた場合、それは $this->controller_vars['users']; $this->controller_vars['users'] に似た単純な $users でそれらにアクセスできるように、それを抽出する方法を探しています

4

1 に答える 1

0

これは直接的な答えではないことは理解していますが、これでオブジェクト指向に「移行」することを検討することをお勧めします。Controllers および Actions オブジェクトを作成する場合、それらは多かれ少なかれ同じ方法で ( autoloaderを使用して) 含める/要求することができ、コンストラクターなどを介してそれらに変数を渡すことができます。

このようなもの:

Class Layout {
    public function processAction() {
        $class = 'Action' . $selected_action;
        $Controller = new $class( $this->controller_vars );
    }
}
于 2013-03-21T14:14:12.463 に答える