0

Zend は、私が作成するすべての新しいコントローラーとアクションに対して、/views/scripts/controllername. ただし、データベースからのテキストを挿入できる単一のテンプレートを複数のアクションで共有したいと考えています。

現在、レイアウトを使用して、ページ固有のビューを委任していますecho $this->layout()->content。私は次のことを試しました:

class SomeController extends Zend_Controller_Action{

    public function someAction() {
        $path = $this->view->getScriptPath();
        $this->view = new Zend_View();
        $this->view->setScriptPath($path);
        $this->view->render('default.phtml');
    }
}

ただし、スクリプト「some/some.phtml」がパスに見つからないというエラーが表示されます。これを正しく行うにはどうすればよいですか?

4

2 に答える 2

2

「デフォルト」(拡張子なし)を使用し、メソッドを直接(ビューではなく)呼び出す必要があります。

$this->render('default');

Zend_Controller_Action::renderを参照してください

render( string|null $action = null, string|null $name = null, bool $noController = false ) : 無効

ビューをレンダリングする

ビューをレンダリングします。デフォルトでは、ビューはビュー スクリプト パスで /.phtml として見つかります。{@link $viewSuffix} をリセットすることで、スクリプトの接尾辞を変更できます。$noController に真偽値 true を指定することで、コントローラ ディレクトリ プレフィックスを省略できます。

デフォルトでは、レンダリングされたコンテンツが応答に追加されます。$name を指定することで、設定する名前付き本文コンテンツ セグメントを指定できます。


特定のスクリプトを提供する場合は、

$this->renderScript('controller/action.phtml');

Zend_Controller_Action::renderScriptを参照してください

renderScript( string $script, string $name = null ) : void

特定のビュー スクリプトをレンダリングする

{@link render()} と同様に、このメソッドはビュー スクリプトをレンダリングします。ただし、render() とは異なり、{@link getViewScript()} を介してビュー スクリプトを自動決定するのではなく、渡されたスクリプトをレンダリングします。使用するビュー スクリプトの正確な名前とパスがわかっている場合、または getViewScript() で定義された仕様に準拠しないパスを使用している場合は、これを使用します。

デフォルトでは、レンダリングされたコンテンツが応答に追加されます。$name を指定することで、設定する名前付き本文コンテンツ セグメントを指定できます。

于 2011-06-14T11:05:09.193 に答える
0

viewRendererの使用を選択し、別のコントローラーからビューを選択する必要がある場合は、$noController パラメーターを TRUE に設定する必要があります。

ブックコントローラー:

public function saveBookAction()
{ 
    ...
    $this->_helper->viewRenderer('/approval/index', null, $noController = true);
}

これは、デフォルトの /views/scripts/book/save-book.phtml ではなく、ビュー/views/scripts/approval/index.phtmlを探します。

于 2012-04-29T10:12:35.213 に答える