[ZF-10089] Zend_Log
[zend.git] / documentation / manual / es / module_specs / Zend_Controller-ActionHelpers-ViewRenderer.xml
blob5c5923ed18cc3f6514b07750d76fa74067bd185f
1 <?xml version="1.0" encoding="UTF-8"?>
2     <!-- EN-Revision: 20765 -->
3     <!-- Reviewed: no -->
4 <sect3 id="zend.controller.actionhelpers.viewrenderer">
5     <title>ViewRenderer</title>
7     <sect4 id="zend.controller.actionhelper.viewrenderer.introduction">
8         <title>Introducción</title>
10         <para> El ayudante <emphasis>ViewRenderer</emphasis> está diseñado para
11             satisfacer los siguientes objetivos: </para>
13         <itemizedlist>
14             <listitem>
15                 <para>Eliminar la necesidad de instanciar objetos de vista
16                     dentro de los controladores; los objetos de vista quedarán
17                     registrados automáticamente con el contralor.</para>
18             </listitem>
20             <listitem>
21                 <para>Establece automáticamente el script de vista, el ayudante,
22                     y los paths de los filtros basados en el módulo actual.
23                     Asocia automáticamente el nombre del módulo actual como un
24                     prefijo de clase para las clases ayudante y filtro. </para>
25             </listitem>
27             <listitem>
28                 <para>Crea un objeto de vista, disponible globalmente para todos
29                     los controladores y acciones despachados.</para>
30             </listitem>
32             <listitem>
33                 <para>Permite al desarrollador establecer por defecto las
34                     opciones de renderizado para todos los controladores.
35                 </para>
36             </listitem>
38             <listitem>
39                 <para>Agrega la capacidad para renderizar automáticamente los
40                     scripts de vista sin ninguna intervención.</para>
41             </listitem>
43             <listitem>
44                 <para>Permite al desarrollador crear sus propias
45                     especificaciones para el path base de vistas y para el path
46                     de los scripts de vista.</para>
47             </listitem>
48         </itemizedlist>
50         <note>
51             <para> Si realiza un <methodname>_forward()</methodname> ,
52                 redirecciona, o <methodname>render()</methodname> manualmente,
53                 el autorendering no se llevará a cabo, como está realizando
54                 cualquiera de estas acciones le está diciendo al
55                     <emphasis>ViewRenderer</emphasis> que usted está
56                 determinando su propia salida. </para>
57         </note>
59         <note>
60             <para> El <emphasis>ViewRenderer</emphasis> está habilitado por
61                 defecto. Puede desactivarlo vía parámetro del front controller
62                     <emphasis>noViewRenderer</emphasis>
63                     (<command>$front->setParam('noViewRenderer',true)</command>)
64                 o eliminando al ayudante del stack de ayudantes ( <methodname>
65                     Zend_Controller_Action_HelperBroker::removeHelper('viewRenderer')
66                 </methodname> ). </para>
68             <para> Si desea modificar los settings del
69                     <emphasis>ViewRenderer</emphasis> antes de despachar el
70                 front controller, puede hacerlo en una de las dos maneras: </para>
72             <itemizedlist>
73                 <listitem>
74                     <para> Instanciar y registrar su propio objeto
75                             <emphasis>ViewRenderer</emphasis> y pasarlo al
76                         ayudante: </para>
78                     <programlisting language="php"><![CDATA[
79 $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
80 $viewRenderer->setView($view)
81              ->setViewSuffix('php');
82 Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
83 ]]></programlisting>
84                 </listitem>
86                 <listitem>
87                     <para> Inicializar y/o recuperar un objeto
88                             <emphasis>ViewRenderer</emphasis> por demanda via el
89                         ayudante: </para>
91                     <programlisting language="php"><![CDATA[
92 $viewRenderer =
93     Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
94 $viewRenderer->setView($view)
95              ->setViewSuffix('php');
96 ]]></programlisting>
97                 </listitem>
98             </itemizedlist>
99         </note>
100     </sect4>
102     <sect4 id="zend.controller.actionhelper.viewrenderer.api">
103         <title>API</title>
105         <para> En su uso más básico, simplemente instancie a
106                 <emphasis>ViewRenderer</emphasis> y páselo al ayudante de
107             acciones. La forma más fácil para instanciar y registrar de una sola
108             vez es utilizando el método del ayudante
109                 <methodname>getStaticHelper()</methodname> : </para>
111         <programlisting language="php"><![CDATA[
112 Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
113 ]]></programlisting>
115         <para> La primera vez que se instancia un controlador de acción, se
116             disparará <emphasis>ViewRenderer</emphasis> para instanciar al
117             objeto vista. Cada vez que el controlador es instanciado, se llama
118             al método <methodname>init()</methodname> de
119                 <emphasis>ViewRenderer</emphasis> , que lo llevará a establecer
120             la propiedad del controlador de acción, y llama a
121                 <methodname>addScriptPath()</methodname> con un path relativo al
122             módulo actual; este será llamado con un prefijo de clase nombrada
123             después del módulo actual, haciendo efectivamente el namespacing de
124             todas las clases de ayudantes y filtros que define para el módulo. </para>
126         <para> Cad vez que llama a <methodname>postDispatch()</methodname> ,
127             este llamará a <methodname>render()</methodname> para la acción
128             actual. </para>
130         <para>Como ejemplo, considere la siguiente clase:</para>
132         <programlisting language="php"><![CDATA[
133 // Una clase controlador, módulo foo:
134 class Foo_BarController extends Zend_Controller_Action
136     // Render bar/index.phtml por defecto; no se requiere acción
137     public function indexAction()
138     {
139     }
141     // Render bar/populate.phtml con la variable 'foo' establecida a 'bar'.
142     // Dado que el objeto vista está definido en preDispatch(),
143     // ya está disponible.
144     public function populateAction()
145     {
146         $this->view->foo = 'bar';
147     }
152 // en uno de sus scripts de vista:
153 $this->foo(); // llama a Foo_View_Helper_Foo::foo()
154 ]]></programlisting>
156         <para> El <emphasis>ViewRenderer</emphasis> también define una serie de
157             accededores para permitir establecer y recuperar opciones de vista: </para>
159         <itemizedlist>
160             <listitem>
161                 <para>
162                     <methodname>setView($view)</methodname> le permite
163                     establecer el objeto vista para
164                         <emphasis>ViewRenderer</emphasis> . Se vuelve como una
165                     propiedad de clase pública <varname>$view</varname> .
166                 </para>
167             </listitem>
169             <listitem>
170                 <para>
171                     <methodname>setNeverRender($flag = true)</methodname> puede
172                     ser utilizado para activar o desactivar globalmente el
173                     autorendering, es decir, para todos los controladores. Si es
174                     verdadero, <methodname>postDispatch()</methodname> no
175                     llamará automáticamente a <methodname>render()</methodname>
176                     en el controlador actual.
177                         <methodname>getNeverRender()</methodname> recupera el
178                     valor actual. </para>
179             </listitem>
181             <listitem>
182                 <para>
183                     <methodname>setNoRender($flag = true)</methodname> puede ser
184                     utilizado para activar o desactivar el autorendering. Si es
185                     verdadero, <methodname>postDispatch()</methodname> no
186                     llamará automáticamente a <methodname>render()</methodname>
187                     en el controlador actual. Este ajuste se reseteará cada vez
188                     que se llame a <methodname>preDispatch()</methodname> (es
189                     decir, usted necesita establecer este flag para cada
190                     controlador para el cual no quiera que el autorenderering se
191                     ejecute). <methodname>getNoRender()</methodname> recupera el
192                     valor actual. </para>
193             </listitem>
195             <listitem>
196                 <para>
197                     <methodname>setNoController($flag = true)</methodname> pude
198                     ser usado para decirle a <methodname>render()</methodname>
199                     que no busque el script de acción en un subdirectorio
200                     nombrado después de que el controlador (que es el
201                     comportamiento por defecto)
202                         <methodname>getNoController()</methodname> recupere el
203                     valor actual. </para>
204             </listitem>
206             <listitem>
207                 <para>
208                     <methodname>setNeverController($flag = true)</methodname> es
209                     análogo a <methodname>setNoController()</methodname> , pero
210                     trabaja a un nivel global -- es decir, que no se reseteará
211                     por cada acción ejecutada.
212                         <methodname>getNeverController()</methodname> recupera
213                     el valor actual. </para>
214             </listitem>
216             <listitem>
217                 <para>
218                     <methodname>setScriptAction($name)</methodname> puede ser
219                     utilizado para especificar el script de acción a renderizar.
220                         <varname>$name</varname> debe ser el nombre del script
221                     menos el sufijo del archivo (y sin el subdirectorio del
222                     controlador, a menos que <emphasis>noController</emphasis>
223                     se haya activado). Si no se ha especificado, busca un script
224                     de vista nombrado después de la acción en el objeto
225                     solicitud. <methodname>getScriptAction()</methodname>
226                     recupera el valor actual. </para>
227             </listitem>
229             <listitem>
230                 <para>
231                     <methodname>setResponseSegment($name)</methodname> puede ser
232                     utilizado para especificar qué segmento del objeto respuesta
233                     nombrado renderizar. Si no se especifica, se hace en el
234                     segmento por defecto.
235                         <methodname>getResponseSegment()</methodname> recupera
236                     el valor actual. </para>
237             </listitem>
239             <listitem>
240                 <para>
241                     <methodname>initView($path, $prefix, $options)</methodname>
242                     puede ser llamado para especificar el path base de las
243                     vistas, prefijos de clase para scripts de ayudantes y
244                     filtros, y las opciones de <emphasis>ViewRenderer</emphasis>
245                     . Puede pasar cualquiera de los siguientes flags:
246                         <emphasis>neverRender</emphasis> ,
247                         <emphasis>noRender</emphasis> ,
248                         <emphasis>noController</emphasis> ,
249                         <emphasis>scriptAction</emphasis> , y
250                         <emphasis>responseSegment</emphasis> . </para>
251             </listitem>
253             <listitem>
254                 <para>
255                     <methodname>setRender($action = null, $name = null,
256                         $noController = false)</methodname> le permite
257                     establecer cualquier <emphasis>scriptAction</emphasis> ,
258                         <emphasis>responseSegment</emphasis> , y
259                         <emphasis>noController</emphasis> en un pase.
260                         <methodname>direct()</methodname> es un alias a este
261                     método, permitiéndole llamar a este método fácilmente dede
262                     su controlador: </para>
264                 <programlisting language="php"><![CDATA[
265 // Render 'foo' en lugar del script de acción actual
266 $this->_helper->viewRenderer('foo');
268 // render form.phtml al segmento de respuesta de 'html', sin usar un
269 // subdirectorio de scripts de controladores de acción:
270 $this->_helper->viewRenderer('form', 'html', true);
271 ]]></programlisting>
273                 <note>
274                     <para>
275                         <methodname>setRender()</methodname> y
276                             <methodname>direct()</methodname> realmente no
277                         renderiza el script de vista, sino que establece
278                         indicaciones que <methodname>postDispatch()</methodname>
279                         y <methodname>render()</methodname> utlizarán para
280                         renderizar la vista. </para>
281                 </note>
282             </listitem>
283         </itemizedlist>
285         <para> El constructor le permite opcionalmente pasar el objeto vista y
286             las opciones de <emphasis>ViewRenderer</emphasis> ; acepta los
287             mismos flags que <methodname>initView()</methodname> : </para>
289         <programlisting language="php"><![CDATA[
290 $view    = new Zend_View(array('encoding' => 'UTF-8'));
291 $options = array('noController' => true, 'neverRender' => true);
292 $viewRenderer =
293     new Zend_Controller_Action_Helper_ViewRenderer($view, $options);
294 ]]></programlisting>
296         <para>Hay varios métodos adicionales para personalizar especificaciones
297             del path, usados para determinar el path base del script de vista
298             para añadir al objeto vista, y el path del script de vista a usar
299             cuando esté autodeterminando el script de vista a renderizar. Cada
300             uno de estos métodos toma uno o más de los siguientes
301             localizadores:</para>
303         <itemizedlist>
304             <listitem>
305                 <para>
306                     <emphasis>:moduleDir</emphasis> hace referencia a la actual
307                     directorio base del módulo(por convención, el directorio
308                     padre del directorio del módulo controlador). </para>
309             </listitem>
311             <listitem>
312                 <para>
313                     <emphasis>:module</emphasis> hace referencia al nombre del
314                     módulo actual. </para>
315             </listitem>
317             <listitem>
318                 <para>
319                     <emphasis>:controller</emphasis> hace referencia al nombre
320                     del controlador actual. </para>
321             </listitem>
323             <listitem>
324                 <para>
325                     <emphasis>:action</emphasis> hace referencia al nombre de la
326                     acción actual. </para>
327             </listitem>
329             <listitem>
330                 <para>
331                     <emphasis>:suffix</emphasis> hace referencia al sufijo del
332                     script de vista (que puede ser definido via
333                         <methodname>setViewSuffix()</methodname> ). </para>
334             </listitem>
335         </itemizedlist>
337         <para>Los métodos para controlar las especificaciones del path
338             son:</para>
340         <itemizedlist>
341             <listitem>
342                 <para>
343                     <methodname>setViewBasePathSpec($spec)</methodname> le
344                     permite cambiar la especificación del path utilizada para
345                     determinar el path base para añadir al objeto vista. La
346                     especificación por defecto es
347                         <filename>:moduleDir/views</filename> . Puede recuperar
348                     la especificación actual en cualquier momento usando
349                         <methodname>getViewBasePathSpec()</methodname> . </para>
350             </listitem>
352             <listitem>
353                 <para>
354                     <methodname>setViewScriptPathSpec($spec)</methodname> le
355                     permite cambiar el path de la especificación utilizada para
356                     determinar el path a un script de vista individual (menos el
357                     path de la base del script de vista). La especificación por
358                     defecto es <filename>:controller/:action.:suffix</filename>
359                     . Puede recuperar la especificación actual en cualquier
360                     momento usando
361                         <methodname>getViewScriptPathSpec()</methodname> .
362                 </para>
363             </listitem>
365             <listitem>
366                 <para>
367                     <methodname>setViewScriptPathNoControllerSpec($spec)</methodname>
368                     le permite cambiar el path de la especificación utilizado
369                     para determinar el path a un script de vista individual
370                     cuando <emphasis>noController</emphasis> está activado
371                     (menos el path base del script de vista). La especificación
372                     por defecto es <filename>:action.:suffix</filename> . Puede
373                     recuperar la especificación actual en cualquier momento
374                     usando
375                         <methodname>getViewScriptPathNoControllerSpec()</methodname>
376                     . </para>
377             </listitem>
378         </itemizedlist>
380         <para> Para un control más refinado sobre el path de especificaciones,
381             puede usar <link linkend="zend.filter.inflector"
382                 >Zend_Filter_Inflector</link> . Bajo el capó,
383                 <emphasis>ViewRenderer</emphasis> ya usa un inflector para
384             realizar mapeos del path. Para interactuar con el inflector -- ya
385             sea para establecerlo para uso propio, o para modificar el inflector
386             por defecto, se pueden utilizar los siguientes métodos: </para>
388         <itemizedlist>
389             <listitem>
390                 <para>
391                     <methodname>getInflector()</methodname> recupera el
392                     inflector. Si no existe todavía en
393                         <emphasis>ViewRenderer</emphasis> , se crea uno
394                     utilizando las reglas predeterminadas. </para>
396                 <para> Por defecto, utiliza reglas de referencias estáticas para
397                     el sufijo y directorio de módulos, así como una meta
398                     estática; esto permite que diversas propiedades de
399                         <emphasis>ViewRenderer</emphasis> tengan la capacidad de
400                     modificar dinámicamente al inflector. </para>
401             </listitem>
403             <listitem>
404                 <para>
405                     <methodname>setInflector($inflector,
406                         $reference)</methodname> permite establecer un inflector
407                     personalizado para usar con
408                         <emphasis>ViewRenderer</emphasis> . Si
409                         <varname>$reference</varname> es verdadero, establecerá
410                     el sufijo y directorio de módulos como referencias estáticas
411                     a las propiedades de <emphasis>ViewRenderer</emphasis> , así
412                     como al objetivo. </para>
413             </listitem>
414         </itemizedlist>
416         <note>
417             <title>Convenciones por Defecto para Lookup</title>
419             <para> El <emphasis>ViewRenderer</emphasis> hace algún tipo de
420                 normalización del path para facilitar la búsqueda de los scripts
421                 de vista. Las reglas predeterminadas son los siguientes: </para>
423             <itemizedlist>
424                 <listitem>
425                     <para>
426                         <emphasis>:module</emphasis> : MixedCase y
427                         camelCasedWords están separados por guiones, y el string
428                         completo se convierte a minúsculas. Por ejemplo:
429                         "FooBarBaz" pasa a ser "foo-bar-baz". </para>
431                     <para> Internamente, el inflector utiliza los filtros
432                             <classname>Zend_Filter_Word_CamelCaseToDash</classname>
433                         y <classname>Zend_Filter_StringToLower</classname> .
434                     </para>
435                 </listitem>
437                 <listitem>
438                     <para>
439                         <emphasis>:controller</emphasis> : MixedCase y
440                         camelCasedWords están separados por guiones; los
441                         subrayados se convierten en separadores de directorio ,
442                         y el string emitido a minúsculas. Ejemplos: "
443                             <classname>FooBar</classname> " pasa a ser
444                         "foo-bar"; " <classname>FooBar_Admin</classname> " pasa
445                         a ser " <filename>foo-bar/admin</filename> ". </para>
447                     <para> Internamente, el inflector utiliza los filtros
448                             <classname>Zend_Filter_Word_CamelCaseToDash</classname>
449                         ,
450                             <classname>Zend_Filter_Word_UnderscoreToSeparator</classname>
451                         , y <classname>Zend_Filter_StringToLower</classname> .
452                     </para>
453                 </listitem>
455                 <listitem>
456                     <para>
457                         <emphasis>:action</emphasis> : MixedCase y
458                         camelCasedWords están separados por guiones; los
459                         caracteres no alfanuméricos son traducidos a guiones, y
460                         el string emitido a minúsculas. Ejemplos: "fooBar" pasa
461                         a ser "foo-bar"; "foo-barBaz" pasa a ser "foo-bar-baz". </para>
463                     <para> Internamente, el inflector utiliza los filtros
464                             <classname>Zend_Filter_Word_CamelCaseToDash</classname>
465                         , <classname>Zend_Filter_PregReplace</classname> , y
466                             <classname>Zend_Filter_StringToLower</classname> .
467                     </para>
468                 </listitem>
469             </itemizedlist>
470         </note>
472         <para> Los últimos temas en la <acronym>API</acronym> de
473                 <emphasis>ViewRenderer</emphasis> son los métodos para
474             determinar realmente los paths de los scripts de vista y el
475             rendering de las vistas. Estos incluyen: </para>
477         <itemizedlist>
478             <listitem>
479                 <para>
480                     <methodname>renderScript($script, $name)</methodname>
481                     permite renderizar un script con una ruta que especifique,
482                     opcionalmente a un segmento nombrado del path. Cuando se
483                     utiliza este método, <emphasis>ViewRenderer</emphasis> no
484                     autodetermina el nombre del script, en cambio pasa
485                     directamente a <varname>$script</varname> el argumento
486                     directamente al método del objeto vista
487                         <methodname>render()</methodname> . </para>
489                 <note>
490                     <para> Una vez que la vista ha sido renderizada al objeto
491                         respuesta, se establece <emphasis>noRender</emphasis>
492                         para evitar accidentalmente renderizar el mismo script
493                         de vista varias veces. </para>
494                 </note>
496                 <note>
497                     <para> Por defecto,
498                             <methodname>Zend_Controller_Action::renderScript()</methodname>
499                         le delega a <emphasis>ViewRenderer</emphasis> el método
500                             <methodname>renderScript()</methodname> . </para>
501                 </note>
502             </listitem>
504             <listitem>
505                 <para>
506                     <methodname>getViewScript($action, $vars)</methodname> crea
507                     el path a un script de vista basado en la acción pasada y/o
508                     cualquier variables pasadas en <varname>$vars</varname> .
509                     Las claves para este array pueden incluir cualquiera de las
510                     claves de especificación de paths ('moduleDir', 'module',
511                     'controller', 'action', y 'suffix'). Se utilizarán
512                     cualquiera de la variables pasadas; de lo contrario, se
513                     utilizarán valores basados en la petición actual. </para>
515                 <para>
516                     <methodname>getViewScript()</methodname> utilizará tanto a
517                         <emphasis>viewScriptPathSpec</emphasis> o
518                         <emphasis>viewScriptPathNoControllerSpec</emphasis>
519                     sobre la base establecida del flag
520                         <emphasis>noController</emphasis> . </para>
522                 <para> Los delimitadores de palabras encontrados en un módulo,
523                     controlador o nombres de acción serán reemplazados por
524                     guiones ('-'). Así pues, si tiene el nombre de controlador '
525                         <command>foo.bar</command> ' y la acción '
526                         <command>baz:bat</command> ', utilizando la
527                     especificación por defecto del path se traducirá en un path
528                     al script de vista '
529                         <filename>foo-bar/baz-bat.phtml</filename> '. </para>
531                 <note>
532                     <para> Por defecto,
533                             <methodname>Zend_Controller_Action::getViewScript()</methodname>
534                         delega el método
535                             <methodname>getViewScript()</methodname> de
536                             <emphasis>ViewRenderer</emphasis> . </para>
537                 </note>
538             </listitem>
540             <listitem>
541                 <para>
542                     <methodname>render($action, $name,
543                         $noController)</methodname> comprueba primero para ver
544                     si bien <varname>$name</varname> o
545                         <varname>$noController</varname> se han pasado, y si es
546                     así, establece los flags apropiados (responseSegment y
547                     noController, respectivamente) en
548                         <emphasis>ViewRenderer</emphasis> . A continuación, pasa
549                     el argumento <varname>$action</varname> , si hay alguno, a
550                         <methodname>getViewScript()</methodname> . Por último,
551                     pasa el path calculado del script de vista a
552                         <methodname>renderScript()</methodname> . </para>
554                 <note>
555                     <para> Hay que ser conscientes de los efectos secundarios al
556                         usar <methodname>render()</methodname> : los valores que
557                         usted pasa para el nombre del segmento respuesta y para
558                         el flag noController persistirán en el objeto. Además,
559                         noRender será establecido después de completar la
560                         renderización. </para>
561                 </note>
563                 <note>
564                     <para> Por defecto,
565                             <methodname>Zend_Controller_Action::render()</methodname>
566                         delega a <emphasis>ViewRenderer</emphasis> el método
567                             <methodname>render()</methodname> . </para>
568                 </note>
569             </listitem>
571             <listitem>
572                 <para>
573                     <methodname>renderBySpec($action, $vars, $name)</methodname>
574                     permite pasar variables de especificación del path a fin de
575                     determinar el path para la creación del script de vista.
576                     Este pasa <varname>$action</varname> y
577                         <varname>$vars</varname> a
578                         <methodname>getScriptPath()</methodname> , y luego pasa
579                     el path del script resultante y <varname>$name</varname> a
580                         <methodname>renderScript()</methodname> . </para>
581             </listitem>
582         </itemizedlist>
583     </sect4>
585     <sect4 id="zend.controller.actionhelper.viewrenderer.basicusage">
586         <title>Ejemplos Uso Básico</title>
588         <example
589             id="zend.controller.actionhelper.viewrenderer.basicusage.example-1">
590             <title>Uso Básico</title>
592             <para> En lo más básico, usted simplemente inicializa y registra el
593                 ayudante <emphasis>ViewRenderer</emphasis> con el ayudante
594                 broker en su bootstrap, y luego establecer las variables en sus
595                 métodos de acción. </para>
597             <programlisting language="php"><![CDATA[
598 // En su bootstrap:
599 Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
603 // 'foo' módulo, 'bar' controlador:
604 class Foo_BarController extends Zend_Controller_Action
606     // Render bar/index.phtml por defecto; no se requieren acciones
607     public function indexAction()
608     {
609     }
611     // Render bar/populate.phtml la variable 'foo' establecida a 'bar'.
612     // Dado que el objeto fue definido en preDispatch(), está disponible.
613     public function populateAction()
614     {
615         $this->view->foo = 'bar';
616     }
618     // No hace rendering, ya que salta a otra acción; la nueva acción
619     // realizará cualquier rendering
620     public function bazAction()
621     {
622         $this->_forward('index');
623     }
625     // No hace rendering, ya que redirecciona a otra ubicación
626     public function batAction()
627     {
628         $this->_redirect('/index');
629     }
631 ]]></programlisting>
632         </example>
634         <note>
635             <title>Convenciones de Nombres: Delimitadores de Palabras en
636                 Controladores y Nombres de Acción</title>
637             <para> Si su controlador o nombre de acción está compuesto por
638                 varias palabras, el despachador exige que estos sean separados
639                 de la <acronym>URL</acronym> por un path específico y caracteres
640                 delimitadores de palabras. El <emphasis>ViewRenderer</emphasis>
641                 reemplaza cualquier delimitador de paths encontrado en el nombre
642                 del controlador con el delimitador actual ('/'), y cualquier
643                 delimitador de palabra encontrado con un guión ('-') cuando crea
644                 paths. Así, una llamada a la acción
645                     <filename>/foo.bar/baz.bat</filename> despachará a
646                     <methodname>FooBarController::bazBatAction()</methodname> en
647                     <filename>FooBarController.php</filename> , el cual
648                 renderizaría a <filename>foo-bar/baz-bat.phtml</filename> ; una
649                 llamada a la acción <filename>/bar_baz/baz-bat</filename>
650                 despachará a
651                     <methodname>Bar_BazController::bazBatAction()</methodname>
652                 en <filename>Bar/BazController.php</filename> (note la
653                 separación del path) y renderiza
654                     <filename>bar/baz/baz-bat.phtml</filename> . </para>
656             <para> Tener en cuenta que el en el segundo ejemplo, el módulo es
657                 todavía el módulo por defecto, pero que, debido a la existencia
658                 de un separador de paths, el controlador recibe el nombre
659                     <classname>Bar_BazController</classname> , en
660                     <filename>Bar/BazController.php</filename> . El
661                     <emphasis>ViewRenderer</emphasis> imita la jerarquía del
662                 directorio del controlador. </para>
663         </note>
665         <example
666             id="zend.controller.actionhelper.viewrenderer.basicusage.example-2">
667             <title>Deshabilitando Autorender</title>
669             <para> Para algunas acciones o controladores, usted puede querer
670                 apagar el autorendering -- por ejemplo, si quiere emitir un tipo
671                 diferente de salida ( <acronym>XML</acronym> ,
672                     <acronym>JSON</acronym> , etc), o si simplemente no desea
673                 emitir nada. Tiene dos opciones: apagar todos los casos de
674                 autorendering ( <methodname>setNeverRender()</methodname> ), o
675                 simplemente desactivarlo para la acción actual (
676                     <methodname>setNoRender()</methodname> ). </para>
678             <programlisting language="php"><![CDATA[
679 // Baz clase del controlador, bar módulo:
680 class Bar_BazController extends Zend_Controller_Action
682     public function fooAction()
683     {
684         // No auto renderize esta acción
685         $this->_helper->viewRenderer->setNoRender();
686     }
689 // Bat clase del controlador, bar módulo:
690 class Bar_BatController extends Zend_Controller_Action
692     public function preDispatch()
693     {
694         // Nunca auto renderizar las acciones de este controlador
695         $this->_helper->viewRenderer->setNoRender();
696     }
698 ]]></programlisting>
699         </example>
701         <note>
702             <para> En muchos casos, no tiene sentido desactivar el autorendering
703                 globalmente (ala <methodname>setNeverRender()</methodname> ), y
704                 la única cosa que puede ganar de
705                     <emphasis>ViewRenderer</emphasis> es el autosetup del objeto
706                 de vista. </para>
707         </note>
709         <example
710             id="zend.controller.actionhelper.viewrenderer.basicusage.example-3">
711             <title>Eligiendo Un Script de Vista Diferente</title>
713             <para> Algunas situaciones requieren renderizar un script diferente
714                 al llamado después de la acción. Por ejemplo, si tiene un
715                 controlador que tiene tanto las acciones de agregar y de editar,
716                 ambos pueden mostrar la misma vista 'form', aunque con
717                 diferentes valores establecidos. Puede cambiar fácilmente el
718                 nombre del script usado tanto con
719                     <methodname>setScriptAction()</methodname> ,
720                     <methodname>setRender()</methodname> , o llamando al
721                 ayudante como un método, que invocará a
722                     <methodname>setRender()</methodname> . </para>
724             <programlisting language="php"><![CDATA[
725 // Bar clase controlador, foo módulo:
726 class Foo_BarController extends Zend_Controller_Action
728     public function addAction()
729     {
730         // Render 'bar/form.phtml' en lugar de 'bar/add.phtml'
731         $this->_helper->viewRenderer('form');
732     }
734     public function editAction()
735     {
736         // Render 'bar/form.phtml' en lugar de 'bar/edit.phtml'
737         $this->_helper->viewRenderer->setScriptAction('form');
738     }
740     public function processAction()
741     {
742         // hacer alguna validación...
743         if (!$valid) {
744             // Render 'bar/form.phtml' en lugar de 'bar/process.phtml'
745             $this->_helper->viewRenderer->setRender('form');
746             return;
747         }
749         // de otra manera, continuar procesando...
750     }
753 ]]></programlisting>
754         </example>
756         <example
757             id="zend.controller.actionhelper.viewrenderer.basicusage.example-4">
758             <title>Modificando la Vista Registrada</title>
760             <para> ¿Y si se necesita modificar el objeto vista -- por ejemplo,
761                 cambiar el ayudante de paths, o la codificación?. Puede hacerlo
762                 ya sea por modificar el objeto vista establecido en su
763                 controlador, o arrebatándole el objeto vista a
764                     <emphasis>ViewRenderer</emphasis> ; ambas son referencias al
765                 mismo objeto. </para>
767             <programlisting language="php"><![CDATA[
768 // Bar clase controlador, foo módulo:
769 class Foo_BarController extends Zend_Controller_Action
771     public function preDispatch()
772     {
773         // cambiar la codificavión de la vista
774         $this->view->setEncoding('UTF-8');
775     }
777     public function bazAction()
778     {
779         // Obtener el objeto vista y establecer
780         // el callback de escape a 'htmlspecialchars'
781         $view = $this->_helper->viewRenderer->view;
782         $view->setEscape('htmlspecialchars');
783     }
785 ]]></programlisting>
786         </example>
787     </sect4>
789     <sect4 id="zend.controller.actionhelper.viewrenderer.advancedusage">
790         <title>Ejemplos de Uso Avanzado</title>
792         <example
793             id="zend.controller.actionhelper.viewrenderer.advancedusage.example-1">
794             <title>Cambiando las Especificaciones del Path</title>
796             <para> En algunas circunstancias, puede decidir que las
797                 especificaciones del path por defecto no se adaptan a su sitio.
798                 Por ejemplo, usted puede querer tener un árbol único de
799                 plantillas al que puede dar acceso a sus diseñadores (esto es
800                 muy típico cuando se utiliza <ulink url="http://smarty.php.net/"
801                     >Smarty</ulink> , por ejemplo). En ese caso, puede querer
802                 embeber los datos de la especificación del path base de la
803                 vista, y crear una especificación alternativa para el script de
804                 vista del path ellos mismos. </para>
806             <para> Para los fines de este ejemplo, supongamos que el path base
807                 de las vistas debería ser '
808                     <filename>/opt/vendor/templates</filename> ', y que desea
809                 para que los scripts de vista sean referenciados por '
810                     <filename>:moduleDir/:controller/:action.:suffix</filename>
811                 '; si el flag <emphasis>noController</emphasis> ha sido
812                 establecido, quiere renderizar fuera del nivel superior en lugar
813                 de en un subdirectorio ( <filename>':action.:suffix</filename>
814                 '). Por último, que quiere utilizar 'tpl' como el sufijo del
815                 nombre de archivo del script de vista. </para>
817             <programlisting language="php"><![CDATA[
819  * En su bootstrap:
820  */
822 // Implementación de una vista diferente
823 $view = new ZF_Smarty();
825 $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
826 $viewRenderer->setViewBasePathSpec('/opt/vendor/templates')
827              ->setViewScriptPathSpec(':module/:controller/:action.:suffix')
828              ->setViewScriptPathNoControllerSpec(':action.:suffix')
829              ->setViewSuffix('tpl');
830 Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
831 ]]></programlisting>
832         </example>
834         <example
835             id="zend.controller.actionhelper.viewrenderer.advancedusage.example-2">
836             <title>Rendering Múltiples Scripts de Vista desde una Sola
837                 Acción</title>
839             <para> A veces, puede que necesite renderizar múltiples scripts de
840                 vista desde una sola acción. Esto es muy sencillo -- simplemente
841                 hacer múltiples llamadas a <methodname>render()</methodname> : </para>
843             <programlisting language="php"><![CDATA[
844 class SearchController extends Zend_Controller_Action
846     public function resultsAction()
847     {
848         // Suponga que $this->model es el modelo actual
849         $this->view->results =
850             $this->model->find($this->_getParam('query', '');
852         // render() por defecto lo delega al ViewRenderer
853         // Render primero al from de búsqueda y luego los resultados
854         $this->render('form');
855         $this->render('results');
856     }
858     public function formAction()
859     {
860         // No hacer nada; ViewRenderer hace autorender del script de vista
861     }
863 ]]></programlisting>
864         </example>
865     </sect4>
866 </sect3>