1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20765 -->
4 <sect3 id="zend.controller.actionhelpers.viewrenderer">
5 <title>ViewRenderer</title>
7 <sect4 id="zend.controller.actionhelper.viewrenderer.introduction">
11 <emphasis>ViewRenderer</emphasis> ヘルパーは、
12 以下のような要件を満たすために作られたものです。
18 コントローラ内でいちいちビューオブジェクトのインスタンスを
20 ビューオブジェクトは自動的にコントローラに登録されます。
26 ビュースクリプトやヘルパー、そしてフィルタのパスを
28 モジュール名をヘルパーやフィルタのクラス名の先頭に自動的に関連付ける。
34 すべてのコントローラとアクションで使用できる
42 デフォルトのビューレンダリングオプションを設定できるようにする。
49 自動的にビュースクリプトをレンダリングできる機能を追加する。
63 <methodname>_forward()</methodname> や <methodname>redirect()</methodname>、
64 あるいは手動での <methodname>render()</methodname> を行う場合は、
65 自動レンダリングは不要です。これらの処理を行う場合は、
66 出力を自前で行うことを <emphasis>ViewRenderer</emphasis>
73 <emphasis>ViewRenderer</emphasis> はデフォルトで有効になっています。
74 これを無効にするには、フロントコントローラのパラメータ
75 <emphasis>noViewRenderer</emphasis> を指定する
76 (<command>$front->setParam('noViewRenderer', true);</command>) か、
78 (<methodname>Zend_Controller_Action_HelperBroker::removeHelper('viewRenderer')</methodname>)
83 フロントコントローラでのディスパッチ処理の前に
84 <emphasis>ViewRenderer</emphasis> の設定を変更したい場合は、
91 独自の <emphasis>ViewRenderer</emphasis> のインスタンスを作成し、
95 <programlisting language="php"><![CDATA[
96 $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
97 $viewRenderer->setView($view)
98 ->setViewSuffix('php');
99 Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
105 <emphasis>ViewRenderer</emphasis> オブジェクトを、
106 ヘルパーブローカから必要に応じて作成、取得する。
109 <programlisting language="php"><![CDATA[
111 Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
112 $viewRenderer->setView($view)
113 ->setViewSuffix('php');
120 <sect4 id="zend.controller.actionhelper.viewrenderer.api">
124 もっとも基本的な使用法は、単に <emphasis>ViewRenderer</emphasis>
125 のインスタンスを作成してそれをヘルパーブローカに渡すというものです。
126 インスタンスの作成と登録を一度に行うには、ヘルパーブローカの
127 <methodname>getStaticHelper()</methodname> メソッドを使用するのがいちばん簡単です。
130 <programlisting language="php"><![CDATA[
131 Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
135 アクションコントローラのインスタンスが最初に作成されたときに、
136 <emphasis>ViewRenderer</emphasis> がビューオブジェクトのインスタンスを作成します。
137 コントローラのインスタンスが作成されるたびに、<emphasis>ViewRenderer</emphasis>
138 の <methodname>init()</methodname> が呼び出されます。
139 ここでアクションコントローラのビュープロパティを設定し、
141 <methodname>addScriptPath()</methodname> を呼び出します。
142 これは現在のモジュール名に基づいたプレフィックスをクラス名の先頭につけて呼び出されるので、
143 ヘルパーやフィルタのクラスをモジュール内で効率的に管理できます。
147 <methodname>postDispatch()</methodname> が呼び出されるたびに、現在のアクションの
148 <methodname>render()</methodname> を自動的に呼び出します。
152 例として、次のようなクラスを考えてみましょう。
155 <programlisting language="php"><![CDATA[
156 // foo モジュールのコントローラクラス
157 class Foo_BarController extends Zend_Controller_Action
159 // デフォルトで bar/index.phtml をレンダリングするので、特に何もする必要はありません
160 public function indexAction()
164 // 変数 'foo' の値を 'bar' に設定して bar/populate.phtml をレンダリングします
165 // ビューオブジェクトは既に preDispatch() で定義されているので、既に使用可能です
166 public function populateAction()
168 $this->view->foo = 'bar';
174 // ビュースクリプトの中では、たとえば次のように書きます
175 $this->foo(); // Foo_View_Helper_Foo::foo() を呼び出します
179 <emphasis>ViewRenderer</emphasis> には、
180 ビューのオプションを取得したり設定したりするためのメソッドも豊富に用意されています。
186 <methodname>setView($view)</methodname>
187 は <emphasis>ViewRenderer</emphasis> が使用するビューオブジェクトを設定します。
188 これは、クラスのプロパティ <varname>$view</varname> の値を設定します。
194 <methodname>setNeverRender($flag = true)</methodname>
195 を使用すると、自動レンダリング機能を全体的に
196 (すべてのコントローラに対して)無効にしたり有効にしたりできます。
197 <constant>TRUE</constant> を指定すると、そのコントローラの <methodname>postDispatch()</methodname>
198 では <methodname>render()</methodname> を呼び出さなくなります。
199 <methodname>getNeverRender()</methodname> は、現在の設定を取得します。
205 <methodname>setNoRender($flag = true)</methodname>
206 を使用すると、自動レンダリングを無効にしたり有効にしたりできます。
207 <constant>TRUE</constant> を指定すると、現在のコントローラの <methodname>postDispatch()</methodname>
208 では <methodname>render()</methodname> を呼び出さなくなります。
209 この設定は、<methodname>preDispatch()</methodname>
210 が呼び出されるたびにいったんリセットされます
211 (つまり、自動レンダリングを無効にしたいすべてのコントローラで
212 個々にこれを設定する必要があるということです)。
213 <methodname>getNoRender()</methodname> は、現在の設定を取得します。
219 <methodname>setNoController($flag = true)</methodname>
220 を使用すると、<methodname>render()</methodname>
221 がコントローラ名のサブディレクトリにあるアクションスクリプトを
222 読みにいかなくできます (デフォルトでは読みにいきます)。
223 <methodname>getNoController()</methodname> は、現在の設定を取得します。
229 <methodname>setNeverController($flag = true)</methodname>
230 は <methodname>setNoController()</methodname> と似ていますが、
232 ディスパッチ処理を行っても設定はリセットされません。
233 <methodname>getNeverController()</methodname> は、現在の設定を取得します。
239 <methodname>setScriptAction($name)</methodname>
240 を使用すると、レンダリングするアクションスクリプトを指定できます。
241 <varname>$name</varname> は、スクリプト名から拡張子を除いたもの
242 (そして、<emphasis>noController</emphasis> が指定されていない限り、
243 コントローラのディレクトリ名も除いたもの) となります。
244 指定しなかった場合は、リクエストオブジェクト内のアクションに基づいた名前の
246 <methodname>getScriptAction()</methodname> は、現在の設定を取得します。
252 <methodname>setResponseSegment($name)</methodname>
254 レスポンスオブジェクトのセグメント名を指定できます。
255 指定しなかった場合は、デフォルトのセグメントにレンダリングします。
256 <methodname>getResponseSegment()</methodname> は、現在の設定を取得します。
262 <methodname>initView($path, $prefix, $options)</methodname>
264 また、ヘルパースクリプトとフィルタスクリプトの先頭につけるクラスプレフィックスや
265 <emphasis>ViewRenderer</emphasis> のオプションも設定します。
267 <emphasis>neverRender</emphasis>、<emphasis>noRender</emphasis>、
268 <emphasis>noController</emphasis>、<emphasis>scriptAction</emphasis>
269 および <emphasis>responseSegment</emphasis>
276 <methodname>setRender($action = null, $name = null, $noController
277 = false)</methodname>
278 を使用すると、<emphasis>scriptAction</emphasis> や <emphasis>responseSegment</emphasis>
279 そして <emphasis>noController</emphasis> のいずれかまたは複数を
280 一度に指定できます。<methodname>direct()</methodname>
281 はこのメソッドのエイリアスで、コントローラ内から簡単にコールできます。
284 <programlisting language="php"><![CDATA[
285 // 現在のアクションスクリプトではなく 'foo' をレンダリングします
286 $this->_helper->viewRenderer('foo');
288 // form.phtml の内容をレスポンスセグメント 'html' にレンダリングします。
289 // コントローラのビュースクリプト用サブディレクトリは使用しません。
290 $this->_helper->viewRenderer('form', 'html', true);
294 <methodname>setRender()</methodname> および <methodname>direct()</methodname>
295 は、実際にはビュースクリプトをレンダリングしません。
296 実際にレンダリングを行うのは <methodname>postDispatch()</methodname>
297 や <methodname>render()</methodname> で、
298 それらのメソッドに対するヒントを指示するだけです。
305 ビューオブジェクトを渡したり <emphasis>ViewRenderer</emphasis>
307 このオプションで指定できるのは、<methodname>initView()</methodname>
311 <programlisting language="php"><![CDATA[
312 $view = new Zend_View(array('encoding' => 'UTF-8'));
313 $options = array('noController' => true, 'neverRender' => true);
315 new Zend_Controller_Action_Helper_ViewRenderer($view, $options);
320 ビューオブジェクトで使用するビューの基底パスを変更できます。
321 また、ビュースクリプトが自動レンダリングを行う際に使用するパスも変更できます。
322 これらのメソッドでは、以下のプレースホルダのいずれかあるいは複数が使用できます。
328 <emphasis>:moduleDir</emphasis> は、現在のモジュールの基底ディレクトリを指します
329 (規約では、これはモジュールのコントローラディレクトリの親ディレクトリとなります)。
335 <emphasis>:module</emphasis> は、現在のモジュール名を指します。
341 <emphasis>:controller</emphasis> は、現在のコントローラ名を指します。
347 <emphasis>:action</emphasis> は、現在のアクション名を指します。
353 <emphasis>:suffix</emphasis> は、ビュースクリプトのサフィックス
354 (<methodname>setViewSuffix()</methodname> で設定したもの) を指します。
360 パス指定を制御するメソッドは次のとおりです。
366 <methodname>setViewBasePathSpec($spec)</methodname>
367 は、ビューオブジェクトを追加する際に使用する基底パスを
369 デフォルトの設定は <filename>:moduleDir/views</filename> です。
371 <methodname>getViewBasePathSpec()</methodname> を使用します。
377 <methodname>setViewScriptPathSpec($spec)</methodname>
379 (からビュースクリプトの基底パスを除いた部分)
380 を決める際に使用するパス指定を変更します。
381 デフォルトの設定は <filename>:controller/:action.:suffix</filename> です。
383 <methodname>getViewScriptPathSpec()</methodname> を使用します。
389 <methodname>setViewScriptPathNoControllerSpec($spec)</methodname>
390 は、<emphasis>noController</emphasis> が有効な場合に
392 (からビュースクリプトの基底パスを除いた部分)
393 を決める際に使用するパス指定を変更します。
394 デフォルトの設定は <filename>:action.:suffix</filename> です。
396 <methodname>getViewScriptPathNoControllerSpec()</methodname> を使用します。
403 <link linkend="zend.filter.inflector">Zend_Filter_Inflector</link>
404 を使用します。実は、<emphasis>ViewRenderer</emphasis>
405 はパスのマッピングを行う際に既にインフレクタを使用しています。
406 インフレクタに手を入れたい (独自のインフレクタを使用したり、
407 デフォルトのインフレクタに手を加えたりしたい) 場合は、
414 <methodname>getInflector()</methodname> は、インフレクタを取得します。
415 まだ <methodname>ViewRenderer</methodname> にインフレクタが存在しない場合は、
416 デフォルトの規則にもとづいたインフレクタを作成します。
420 デフォルトでは、サフィックスやモジュールディレクトリへの参照に静的ルールを使用します。
421 また静的な対象を使用します。これにより、さまざまな
422 <emphasis>ViewRenderer</emphasis> のプロパティから
423 動的にインフレクタを変更できるようになります。
428 <methodname>setInflector($inflector, $reference)</methodname> は、
429 <emphasis>ViewRenderer</emphasis> で使用する独自のインフレクタを設定します。
430 <varname>$reference</varname> が <constant>TRUE</constant> の場合は、
431 対象だけでなくサフィックスやモジュールディレクトリも
432 <emphasis>ViewRenderer</emphasis> のプロパティへの静的な参照とします。
437 <title>デフォルトの検索方式</title>
440 <emphasis>ViewRenderer</emphasis> は、
441 パスの正規化を行ってビュースクリプトによる検索を簡単にします。
448 <emphasis>:module</emphasis>:
449 MixedCase および camelCase 形式の単語がダッシュで分割され、
451 "FooBarBaz" は "foo-bar-baz" となります。
456 <classname>Zend_Filter_Word_CamelCaseToDash</classname> および
457 <classname>Zend_Filter_StringToLower</classname> を使用します。
463 <emphasis>:controller</emphasis>:
464 MixedCase および camelCase 形式の単語がダッシュで分割され、
465 アンダースコアはディレクトリ区切り文字に変換され、
467 "<classname>FooBar</classname>" は "foo-bar" となり、そして "<classname>FooBar_Admin</classname>"
468 は "<filename>foo-bar/admin</filename>" となります。
473 <classname>Zend_Filter_Word_CamelCaseToDash</classname>、
474 <classname>Zend_Filter_Word_UnderscoreToSeparator</classname> および
475 <classname>Zend_Filter_StringToLower</classname> を使用します。
481 <emphasis>:action</emphasis>:
482 MixedCase および camelCase 形式の単語がダッシュで分割され、
485 "fooBar" は "foo-bar" となり、"foo-barBaz"
486 は "foo-bar-baz" となります。
491 <classname>Zend_Filter_Word_CamelCaseToDash</classname>、
492 <classname>Zend_Filter_PregReplace</classname> および
493 <classname>Zend_Filter_StringToLower</classname> を使用します。
500 <emphasis>ViewRenderer</emphasis> <acronym>API</acronym> の最後に紹介するのは、
501 実際にビュースクリプトのパスを決定するメソッドと
502 ビューのレンダリングを行うメソッドです。以下をご覧ください。
508 <methodname>renderScript($script, $name)</methodname>
509 は、指定したパスのスクリプトをレンダリングします。
510 オプションで、パスセグメントの名前を指定することもできます。
511 このメソッドを使用する際には、<emphasis>ViewRenderer</emphasis>
512 はスクリプト名を自動的に決定することはありません。
513 そのかわりに、<varname>$script</varname> で指定された内容を直接
514 ビューオブジェクトの <methodname>render()</methodname> メソッドに渡します。
518 レスポンスオブジェクトにビューがレンダリングされると、
519 自動的に <emphasis>noRender</emphasis> を設定します。
520 これにより、同じビュースクリプトを間違って複数回レンダリングしてしまうことを防ぎます。
526 <methodname>Zend_Controller_Action::renderScript()</methodname>
527 は <emphasis>ViewRenderer</emphasis> の
528 <methodname>renderScript()</methodname> メソッドへのプロキシとなります。
535 <methodname>getViewScript($action, $vars)</methodname>
536 は、渡されたアクションや <varname>$vars</varname>
537 で指定した変数の値に基づいてビュースクリプトのパスを作成します。
538 <varname>$vars</varname> 配列のキーは、パスを指定するためのキー
539 ('moduleDir'、'module'、'controller'、'action' および 'suffix')
540 のいずれかとなります。渡された変数の値をもとにしてパスを作成します。
541 なにも渡されなかった場合は、現在のリクエストの内容をもとにしてパスを作成します。
545 <methodname>getViewScript()</methodname>
546 は、<emphasis>noController</emphasis> フラグの内容によって
547 <emphasis>viewScriptPathSpec</emphasis> あるいは
548 <emphasis>viewScriptPathNoControllerSpec</emphasis> のいずれかを使用します。
552 モジュール名やコントローラ名、アクション名にあらわれる
553 単語の区切りは、ダッシュ ('-') に置き換えられます。
554 したがって、たとえばコントローラ名が '<command>foo.bar</command>'
555 でアクション名が '<command>baz:bat</command>' だったとすると、
556 デフォルトのパス指定をもとにしたビュースクリプトのパスは
557 '<filename>foo-bar/baz-bat.phtml</filename>' となります。
563 <methodname>Zend_Controller_Action::getViewScript()</methodname>
564 は <emphasis>ViewRenderer</emphasis> の
565 <methodname>getViewScript()</methodname> メソッドへのプロキシとなります。
572 <methodname>render($action, $name, $noController)</methodname>
573 は、まず <varname>$name</varname> あるいは
574 <varname>$noController</varname> が指定されているかどうかを調べます。
575 指定されている場合は、ViewRenderer の対応するフラグ
576 (それぞれ responseSegment と noController) を設定します。
577 次に、<varname>$action</varname> 引数が指定されていれば、
578 それを <methodname>getViewScript()</methodname> に渡します。
580 <methodname>renderScript()</methodname> に渡します。
585 <methodname>render()</methodname> を使用する際には、その副作用に注意しましょう。
586 レスポンスセグメント名や noController
587 フラグに指定した内容は、そのオブジェクト内で残り続けます。
588 さらに、レンダリングが完了した際に noRender
596 <methodname>Zend_Controller_Action::render()</methodname> は
597 <emphasis>ViewRenderer</emphasis> の <methodname>render()</methodname>
605 <methodname>renderBySpec($action, $vars, $name)</methodname>
606 は、パス指定用の変数を渡してビュースクリプトのパスを決定します。
607 <varname>$action</varname> および <varname>$vars</varname> の内容を
608 <methodname>getScriptPath()</methodname> に、そしてその結果得られたスクリプトのパスと
609 <varname>$name</varname> を <methodname>renderScript()</methodname> に渡します。
615 <sect4 id="zend.controller.actionhelper.viewrenderer.basicusage">
616 <title>基本的な使用例</title>
618 <example id="zend.controller.actionhelper.viewrenderer.basicusage.example-1">
619 <title>基本的な使用法</title>
622 最も基本的な使用法は、起動ファイル内で <emphasis>ViewRenderer</emphasis>
624 アクションメソッドで変数の値を設定するというものです。
627 <programlisting language="php"><![CDATA[
629 Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
633 // 'foo' モジュールの 'bar' コントローラ
634 class Foo_BarController extends Zend_Controller_Action
636 // デフォルトで bar/index.phtml をレンダリングするので、特に何もする必要はありません
637 public function indexAction()
641 // 変数 'foo' の値を 'bar' に設定して bar/populate.phtml をレンダリングします
642 // ビューオブジェクトは既に preDispatch() で定義されているので、既に使用可能です
643 public function populateAction()
645 $this->view->foo = 'bar';
648 // 何もレンダリングせずに別のアクションに転送します
649 // 転送先のアクションで何らかのレンダリングを行います
650 public function bazAction()
652 $this->_forward('index');
655 // 何もレンダリングせず別の場所にリダイレクトします
656 public function batAction()
658 $this->_redirect('/index');
665 <title>命名規約: コントローラ名やアクション名の単語の区切り</title>
667 コントローラやアクションの名前が複数の単語からなるものである場合、
668 ディスパッチャには、特定のパスや区切り文字を使用して単語を区切った
669 <acronym>URL</acronym> を指定しなければなりません。
670 <emphasis>ViewRenderer</emphasis> は、コントローラ名の中にあるパス区切り文字を
671 実際のパス区切り文字 ('/') に置き換え、単語区切り文字をダッシュ
672 ('-') に置き換えてパスを作成します。したがって、
673 アクション <filename>/foo.bar/baz.bat</filename> をコールすると
674 <filename>FooBarController.php</filename> の
675 <methodname>FooBarController::bazBatAction()</methodname> へディスパッチされ、
676 <filename>foo-bar/baz-bat.phtml</filename> をレンダリングすることになります。
677 また、アクション <filename>/bar_baz/baz-bat</filename> をコールすると
678 <filename>Bar/BazController.php</filename> (パス区切り文字に注意) の
679 <methodname>Bar_BazController::bazBatAction()</methodname>
680 へディスパッチされ、<filename>bar/baz/baz-bat.phtml</filename>
685 二番目の例では、モジュールはデフォルトモジュールのままであることに注意しましょう。
687 <filename>Bar/BazController.php</filename> にある
688 <classname>Bar_BazController</classname> を受け取ることになります。
689 ビューレンダラはコントローラのディレクトリ階層を模倣します。
693 <example id="zend.controller.actionhelper.viewrenderer.basicusage.example-2">
694 <title>自動レンダリングの無効化</title>
697 アクションやコントローラによっては、自動レンダリングを無効にしたいこともあるでしょう。
698 たとえば、HTML 以外 (<acronym>XML</acronym> や <acronym>JSON</acronym> など) を出力したい場合や
700 そんな場合には以下のいずれかの方法を使用します。
701 つまり、すべての自動レンダリングを無効にする
702 (<methodname>setNeverRender()</methodname>) か、あるいは現在のアクションでだけ
703 自動レンダリングを無効にする (<methodname>setNoRender()</methodname>) かです。
706 <programlisting language="php"><![CDATA[
707 // Bar モジュールの Baz コントローラクラス
708 class Bar_BazController extends Zend_Controller_Action
710 public function fooAction()
712 // このアクションでは自動レンダリングを行いません
713 $this->_helper->viewRenderer->setNoRender();
717 // Bar モジュールの Bat コントローラクラス
718 class Bar_BatController extends Zend_Controller_Action
720 public function preDispatch()
722 // このコントローラのアクションでは決して自動レンダリングを行いません
723 $this->_helper->viewRenderer->setNoRender();
731 たいていの場合は、自動レンダリングを全体で無効にする
732 (<methodname>setNeverRender()</methodname>) のは無意味です。
733 なぜなら、<emphasis>ViewRenderer</emphasis> の唯一の存在意義が、
734 ビューオブジェクトを自動的に設定することだからです。
738 <example id="zend.controller.actionhelper.viewrenderer.basicusage.example-3">
739 <title>別のビュースクリプトの選択</title>
742 アクション名から自動的に決まるスクリプトではなく、
743 それ以外のものをレンダリングしたくなる場合もあるでしょう。
744 たとえば、add アクションと edit アクションのふたつを持つコントローラがあったとしましょう。
745 どちらのアクションも同じ 'form' ビューを表示しますが、
747 そんな場合に、それぞれでスクリプト名を変えるのは簡単です。
748 <methodname>setScriptAction()</methodname> や <methodname>setRender()</methodname>
749 を使用するか、あるいはヘルパーをメソッドとして呼び出します。
750 これは <methodname>setRender()</methodname> を起動します。
753 <programlisting language="php"><![CDATA[
754 // Foo モジュールの Bar コントローラクラス
755 class Foo_BarController extends Zend_Controller_Action
757 public function addAction()
759 // 'bar/add.phtml' ではなく 'bar/form.phtml' をレンダリングします
760 $this->_helper->viewRenderer('form');
763 public function editAction()
765 // 'bar/edit.phtml' ではなく 'bar/form.phtml' をレンダリングします
766 $this->_helper->viewRenderer->setScriptAction('form');
769 public function processAction()
773 // 'bar/process.phtml' ではなく 'bar/form.phtml' をレンダリングします
774 $this->_helper->viewRenderer->setRender('form');
785 <example id="zend.controller.actionhelper.viewrenderer.basicusage.example-4">
786 <title>登録されているビューの変更</title>
789 ビューオブジェクトの設定を変更したくなったとしましょう。
790 たとえば、ヘルパーのパスやエンコーディングを変更したくなったらどうしますか?
791 そんな場合は、コントローラに設定されているビューオブジェクトを変更するか、
792 あるいは <emphasis>ViewRenderer</emphasis> の外部からビューオブジェクトを取得します。
793 どちらも同じオブジェクトへの参照を取得することになります。
796 <programlisting language="php"><![CDATA[
797 // Foo モジュールの Bar コントローラクラス
798 class Foo_BarController extends Zend_Controller_Action
800 public function preDispatch()
802 // ビューのエンコーディングを変更します
803 $this->view->setEncoding('UTF-8');
806 public function bazAction()
808 // ビューオブジェクトを取得し、エスケープ用のコールバックを 'htmlspecialchars' に設定します
809 $view = $this->_helper->viewRenderer->view;
810 $view->setEscape('htmlspecialchars');
817 <sect4 id="zend.controller.actionhelper.viewrenderer.advancedusage">
818 <title>高度な使用例</title>
820 <example id="zend.controller.actionhelper.viewrenderer.advancedusage.example-1">
821 <title>パスの指定方法の変更</title>
824 場合によっては、デフォルトのパス指定があなたのサイトに
826 たとえば、すべてのテンプレートを単一のディレクトリ配下にまとめ、
827 デザイナにはそのディレクトリに対するアクセス権だけを与えたいといった場合です
828 (<ulink url="http://smarty.php.net/">Smarty</ulink>
830 そんな場合は、ビューの基底パスをハードコーディングし、
831 それをアクションのビュースクリプトのパスとして使用することになります。
835 この例では、ビューの基底パスを '<filename>/opt/vendor/templates</filename>'
836 とし、ビュースクリプトのパスは '<filename>:moduleDir/:controller/:action.:suffix</filename>'
837 となるようにします。<emphasis>noController</emphasis>
838 フラグが設定されている場合は、サブディレクトリ ('<filename>:action.:suffix</filename>')
839 からではなくトップディレクトリからのパスとして探すことになります。
840 最後に、ビュースクリプトのファイルの拡張子として
844 <programlisting language="php"><![CDATA[
850 $view = new ZF_Smarty();
852 $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
853 $viewRenderer->setViewBasePathSpec('/opt/vendor/templates')
854 ->setViewScriptPathSpec(':module/:controller/:action.:suffix')
855 ->setViewScriptPathNoControllerSpec(':action.:suffix')
856 ->setViewSuffix('tpl');
857 Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
861 <example id="zend.controller.actionhelper.viewrenderer.advancedusage.example-2">
862 <title>単一のアクションから複数のビュースクリプトをレンダリングする例</title>
865 時には、複数のビュースクリプトをひとつのアクションで処理したいこともあるでしょう。
866 これは、非常に直感的な方法で実現できます。単に
867 <methodname>render()</methodname> を必要なだけコールすればいいのです。
870 <programlisting language="php"><![CDATA[
871 class SearchController extends Zend_Controller_Action
873 public function resultsAction()
875 // $this->model に現在のモデルが設定されているものとします
876 $this->view->results =
877 $this->model->find($this->_getParam('query', '');
879 // render() は、デフォルトでは ViewRenderer へのプロキシとなります。
880 // まず form を、そして results をレンダリングします
881 $this->render('form');
882 $this->render('results');
885 public function formAction()
887 // 何もしなくても、ViewRenderer が自動的にビュースクリプトをレンダリングします