0

これは、すべてのブロガーや家庭教師が、それが何であるかを知っていると思い込んでいるユーティリティの 1 つです。彼らは、何が起こっているのかを私たち全員が知っていると信じて、例でそれを使い続けています.

人々が を使用または参照する方法からrender()、コンテンツを表示する (例: コンテンツを表示する) ことが示唆されますが、そうである場合、echo実際にコンテンツを表示するために使用するのはなぜですか?

sprintf()他の用途は、文字列に変数を挿入するために内部的に使用するフォームデコレータで使用されるように、コンテンツをフォーマットすることを示唆しています。

では、 、 などrender()の場合はどうするのでしょうか? 誰かがそれが基本的なレベル(フードの下)で機能していることを説明できますか。ありがとう。Zend_ViewZend_Layout

4

1 に答える 1

3

ビュースクリプトをロードし、文字列として出力します。

少し単純化してZend_View、ビュースクリプトファイル(index.phtmlなど)を取得し、それを内部に含めてHTML出力を生成します。このメソッドを使用するrender()ことで、追加のビュースクリプト(おそらくnav.phtmlなど)を取得して、親のビュースクリプト内に出力することができます。アイデアは、同じHTMLを何度も繰り返すのではなく、多くのページで1回だけ繰り返される要素をレンダリングすることです。

renderメソッドのコードはZend_View_Abstractクラスにあり、次のとおりです。

/**
 * Processes a view script and returns the output.
 *
 * @param string $name The script name to process.
 * @return string The script output.
 */
public function render($name)
{
    // find the script file name using the parent private method
    $this->_file = $this->_script($name);
    unset($name); // remove $name from local scope

    ob_start();
    $this->_run($this->_file);

    return $this->_filter(ob_get_clean()); // filter output
}

メソッドの実装は_run()クラスZend_Viewにあり、次のとおりです。

/**
 * Includes the view script in a scope with only public $this variables.
 *
 * @param string The view script to execute.
 */
protected function _run()
{
    if ($this->_useViewStream && $this->useStreamWrapper()) {
        include 'zend.view://' . func_get_arg(0);
    } else {
        include func_get_arg(0);
    }
}

ご覧のとおりrender()、ビュースクリプト名を取得し、そのファイル名を解決し、出力バッファリングを開始し、ビュースクリプトファイルを含め(これは_run()メソッドが内部で行うことです)、オプションのフィルターを介して出力を渡し、最後に生成された文字列を返します。

それについての素晴らしい点は、それが呼び出されたビューオブジェクトのプロパティ(変数)を保持することです(それは同じZend_Viewオブジェクトであり、異なるビュースクリプトがロードされているだけだからです)。partial()この点で、独自の変数スコープを持ち、変数を渡すことができるメソッドとは異なります(foreachデータセット上にある場合の単一行のデータなど、より小さな要素のレンダリングに役立ちます)。

于 2013-03-06T21:34:10.327 に答える