0

私の問題は、コハナがビューをレンダリングするだけだということです。私が

View::factory('/foo/bar')Controller_Otherでは、最初にController_Fooにヒットしません。コントローラにヒットさせてから、ビューをレンダリングします。

class Controller_Other extends Controller_Template {
    public $template = 'main';
    public function action_index() {
        $this->template->body = View::factory('/foo/bar');
    }
}

最初にコントローラーを実行するにはどうすればよいですか?

class Controller_Foo extends Controller_Template {
    public function action_bar() {
        $this->myVar = 'foo';
    }
}

ビューでは、他の人から呼び出すときに$myVar常に設定されますか?views/foo/bar.phpView::factory()

編集:

action_bar独自のビューを文字列に強制的にレンダリングしてから実行するよりもクリーンな方法が必要です。

$foo = new Controller_Foo($this->request, $this->response);
$this->template->body = $foo->action_bar();
4

2 に答える 2

2

何をしているのかわかりません-グローバルビュー変数をバインドするか、内部リクエストを実行します。とにかく、ここに両方の​​場合の例があります:

グローバルビュー変数をバインドします

class Controller_Other extends Controller_Template {
    public $template = 'main';

    public function action_index() {
      View::bind_global('myVar', 'foo'); 
      //binds value by reference, this value will be available in all views. Also you can use View::set_global();

      $this->template->body = View::factory('/foo/bar');
    }

}

内部リクエストを行う

これは「foo/bar」アクションです

class Controller_Foo extends Controller_Template {

     public function action_bar() {
        $myVar = 'foo';
        $this->template->body = View::factory('/foo/bar', array('myVar' => $myVar);
     }
}



class Controller_Other extends Controller_Template {
    public $template = 'main';
    public function action_index() {
         $this->template->body = Request::factory('foo/bar')->execute()->body();
         //by doing this you have called 'foo/bar' action and put all its output to curent requests template body
    }
}
于 2012-05-04T12:46:25.257 に答える
0

次のようにレンダリングする前に、常に$myVar変数を渡して表示する必要があります

public function action_index() {
    $this->template->body = View::factory('/foo/bar')->set('myVar', 'foo');
}

他のコントローラーでは、Viewは単なるテンプレートであるため、再設定する必要があります。スクリプトのさまざまな場所で同じビューを使用する場合は、Viewインスタンスを変数に割り当てて、次のような場所で使用できます。

public function action_index() {
    $this->view = View::factory('/foo/bar')->set('myVar', 'foo');

    $this->template->body = $this->view ;
}

public function action_bar() {
    $this->template->head = $this->view ;
}
于 2012-05-04T08:14:20.263 に答える