ホームページ > バックエンド開発 > PHPチュートリアル > php Zend Framework の render_PHP チュートリアルをクリアする

php Zend Framework の render_PHP チュートリアルをクリアする

WBOY
リリース: 2016-07-21 14:56:23
オリジナル
1111 人が閲覧しました

asp.net mvc をやっていたときに php mvc に興味を持ち、Zend Framework (以下 ZF) を見てから、mvc を比較して理解できるようになり、しばらくの間、比較的コアな関数の render について混乱しました。明確化プロセスを記録します

通常、ZF を使用して PHP mvc を実装する場合、最も重要な場所はもちろん、コントローラー クラスのさまざまなアクション メソッドで、内容を決定して出力します。これは抽象化されたディスパッチ メソッドで確認できます。 class Zend_Controller_Action 一行 $this->$action();

コンテンツを決定して出力する方法はレンダリングですが、これらの状況は以下にいくつかリストされています

1 2class IndexController は Zend_Controller_Action を拡張します
3{
4 パブリック関数 contactAction()
5{
6 //$this->render("index");
7 //$this->render();
8 //$this->renderScript("sidebar.phtml");
9
10
11 //$this->_helper->viewRenderer("サイドバー");
12
13 //$this->view->render("sidebar.phtml");
14 //$this->view("サイドバー"); 15
16}
17}
18?>

要約すると、これらの 3 つのレンダリングのようです (追加歓迎)

1.セルフレンダリング

まず最初のものを見てみましょう

//$this->render("index");
//$this->render();
//$this->renderScript("sidebar.phtml");
これは Zend_Controller_Action クラスの render メソッドを直接使用しています
最初の文は、別のアクションに対応するビューをレンダリングすることです (アクションを実行することではなく、そのアクションに対応するビューをレンダリングすることであることを明確に理解してください)
2 番目の文は、このアクションに対応するビューをレンダリングします。これが何を意味するのか (多くの場合、この記述は見えないため)、これについては以下で説明します。
3 番目の文は、レンダリング固有のビュー ファイルです。ここでは、最初の 2 つのメソッドが実際にこの renderScript を呼び出していると思われるかもしれませんが、そうではありません。 ちなみに、2番目の文の理由を説明しましょう。 Zend_Controller_Action クラスの render メソッドには実際には 2 つの分岐があります。 render 関数のコードは次のとおりです

1 パブリック関数 render($action = null, $name = null, $noController = false)
2{

3 if (!$this->getInvokeArg('noViewRenderer') && $this->_helper->hasHelper('viewRenderer')) {

4 return $this->_helper->viewRenderer->render($action, $name, $noController);
5}
6
7 $view = $this->initView();
8 $script = $this->getViewScript($action, $noController);
9
10 $this->getResponse()->appendBody(
) 11 $view->render($script),
12 $name
13);
14}
1 つの状況として、ビュー アシスタント クラス (viewRenderer) のレンダリング メソッドを使用 (プロキシ) していることがわかります
もう 1 つの状況は、アシスタントを無効にする場合、自分で行う必要があるため、ビュー アシスタントを無効にした後、render() を使用して、このアクションに対応するビュー コンテンツを出力できます。

2. ビューアシスタント viewRenderer を通して

上記ではビュー アシスタントについて説明しましたが、ビュー アシスタントの助けを借りて実行されるアクションの 2 番目のフラグメントを見てみましょう

//$this->_helper->viewRenderer("サイドバー");

実はこの文はレンダリング内容ではなく、どのビューをレンダリングするかを指定するもので、Zend_Controller_Action_Helper_ViewRenderer クラスの関数を参照してください


1 パブリック関数 direct($action = null, $name = null, $noController = null)
2{

3 $this->setRender($action, $name, $noController);

4}
では、出力はどうなるでしょうか?
$this->_helper->viewRenderer("sidebar"); の直後に $this->render(); を呼び出すことができます。 しかし、実際にはそれを呼び出す必要はまったくなく、その文を書くだけです。
renderを書かない場合は、ビューアシスタントが代わりにやってくれます
Zend_Controller_Actionクラスのdispatchメソッドにこの文があります。 $this->_helper->notifyPostDispatch();
_helper とは何ですか? このメソッドを持つ Zend_Controller_Action_HelperBroker クラスです

1 パブリック関数notifyPostDispatch()
2{
3 foreach (self::getStack() として $helper) {

4 $helper->postDispatch();

5}
6}

各アシスタントの postDispatch();
が呼び出されていることがわかります そして、viewRendererはそのアシスタントの1つであり、そのpostDispatchメソッドは次のとおりです

1 パブリック関数 postDispatch()
2{
3 if ($this->_ShouldRender()) {
4 $this->render();
5}
6}
ここで、ビュー アシスタントがレンダリングを支援します。自分でレンダリングする場合、スマート ビュー アシスタントは、 _ShouldRender() の $this->getRequest()->isDispatched() を確認できます。 Zend_Controller_Front クラスのディスパッチ メソッドの次の文: $this->_request->setDispatched(true);

  • 合計 2 ページ:
  • 前のページ
  • 1
  • 2
  • 次のページ

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/364271.html技術記事 asp.net mvc が php mvc に興味を持ったときに、Zend Framework (以下、ZF) を見て、比較的コアな関数 render についてしばらく混乱したことを記録しました。明確なプロセスと通常...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート