| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.controller.basics">
- <title>Conceptos Básicos de Zend_Controller</title>
- <para>
- El sistema
- <classname>Zend_Controller</classname>
- está diseñado para
- ser liviano, modular y extensible. Se trata de un diseño minimalista
- para
- permitir flexibilidad y cierta libertad para los usuarios
- proporcionando al mismo tiempo una
- estructura suficiente para que sistemas
- construidos alrededor de
- <classname>Zend_Controller</classname>
- compartan algunas convenciones y layouts de código similares.
- </para>
- <para>
- El siguiente diagrama muestra el flujo de trabajo, y la narrativa
- que le sigue describe en
- detalle las interacciones:
- </para>
- <para>
- <inlinegraphic width="483" scale="100" align="center" valign="middle"
- fileref="figures/zend.controller.basics.png" format="PNG"/>
- </para>
- <para>
- El flujo de procesos de
- <classname>Zend_Controller</classname>
- está implementado
- por varios componentes. Si bien no es necesario entender los cimientos
- de
- todos estos componentes para utilizar el sistema, tener un
- conocimiento práctico del proceso
- es de mucha utilidad.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <classname>Zend_Controller_Front</classname>
- organiza todo
- el flujo de trabajo del sistema
- <classname>Zend_Controller</classname>
- .
- Es una interpretación del patrón FrontController.
- <classname>Zend_Controller_Front</classname>
- procesa todas
- las solicitudes recibidas por el servidor y es responsable
- en última instancia de la delegación de las solicitudes a los
- ActionControllers
- (
- <classname>Zend_Controller_Action</classname>
- ).
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Request_Abstract</classname>
- (a
- menudo denominado
- <emphasis>Request Object</emphasis>
- ) representa
- el entorno de la solicitud y ofrece métodos para
- establecer y recuperar el controlador, los nombres de las
- acciones y cualquier parámetro de solicitud. Además realiza un seguimiento
- de si la acción que contiene ha sido enviada o no
- por
- <classname>Zend_Controller_Dispatcher</classname>
- .
- Se pueden usar extensiones del objeto abstracto para
- encapsular toda el entorno de la solicitud,
- permitiendo a los routers traer información del ámbito
- de la solicitud a fin de establecer el controlador
- y los nombres de acción.
- </para>
- <para>
- Por defecto, se usa
- <classname>Zend_Controller_Request_Http</classname>
- , el cual
- proporciona acceso a todo el ámbito de la petición
- <acronym>HTTP</acronym>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Router_Interface</classname>
- se usa para definir routers. El ruteo es el proceso de
- examinar el ámbito de la solicitud para determinar
- qué controlador, y qué acción del controlador debe recibir
- la solicitud. Este controlador, la acción, y los parámetros
- opcionales son luego establecidos en el objeto de la solicitud
- para ser procesados por
- <classname>Zend_Controller_Dispatcher_Standard</classname>
- .
- El ruteo (routing) ocurre sólo una vez: cuando la solicitud
- se recibe inicialmente y antes de enviar el primer
- controlador.
- </para>
- <para>
- El router por defecto,
- <classname>Zend_Controller_Router_Rewrite</classname>
- ,
- toma el punto final de una
- <acronym>URI</acronym>
- como se especificó en
- <classname>Zend_Controller_Request_Http</classname>
- y la descompone en un controlador, una acción y parámetros,
- basándose en la información de la ruta del url.
- Como ejemplo, la
- <acronym>URL</acronym>
- <filename>http://localhost/foo/bar/key/value</filename>
- se
- decodificará para usar el controlador
- <emphasis>foo</emphasis>
- ,
- la acción
- <emphasis>bar</emphasis>
- y especificar un parámetro
- <emphasis>key</emphasis>
- con el valor de
- <emphasis>value</emphasis>
- .
- </para>
- <para>
- <classname>Zend_Controller_Router_Rewrite</classname>
- también puede ser utilizado para igualar las rutas arbitrarios;
- para más información, ver
- <link linkend="zend.controller.router">documentación
- del router</link>
- .
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Dispatcher_Interface</classname>
- se usa para definir dispatchers. Dispatching (Despachar) es el proceso
- de sacar el controlador y la acción del objeto que solicita y
- mapearlo a un controlador archivo (o clase) y al método acción
- en la clase del controlador. Si el controlador o acción no
- existen, hará un manejo para determinar los controladores
- por defecto y las acciones a enviar.
- </para>
- <para>
- El proceso actual de dispatching(despacho) consta de instanciar la
- clase del controlador y llamar al método acción en esa
- clase. A diferencia del routing, que ocurre sólo una vez,
- el dispatching(despacho) ocurre en un bucle. Si el estado del objeto que
- que envía la solicita es reseteado en cualquier punto,
- el bucle se repetirá, llamando a cualquier acción que esté
- actualmente establecida en la solicitud del objeto.
- La primera vez el bucle termina con la solicitud del objeto,
- el estado de lo enviado se establece a (
- <type>Boolean</type>
- <constant>TRUE</constant>
- ),
- que terminará el procesamiento.
- </para>
- <para>
- El dispatcher por defecto es
- <classname>Zend_Controller_Dispatcher_Standard</classname>
- .
- Se definen como controladores MixedCasedClasses cuando
- terminan en la palabra Controller, y los métodos de acción
- como camelCasedMethods cuando terminan en la palabra Action:
- <methodname>FooController::barAction()</methodname>
- . En este caso,
- el controlador será referido como
- <emphasis>foo</emphasis>
- y a la
- acción como
- <emphasis>bar</emphasis>
- .
- </para>
- <note>
- <title>Convenciones para Case Naming (Casos de Nombre)</title>
- <para>
- Dado que los humanos somos notablemente inconsistentes
- en mantener cierta sensibilidad respecto a las
- minúsculas y mayúsculas al escribir enlaces,
- Zend Framework realmente normaliza la información de la
- ruta a minúsculas. Esto, por supuesto, afectará cómo
- nombre a su controlador y a sus acciones... o referirse
- a ellos en los enlaces.
- </para>
- <para>
- Si desea que su clase controlador o el nombre del
- método de la acción tenga múltiples MixedCasedWords o
- camelCasedWords, para separar las palabras en la
- <acronym>URL</acronym>
- necesitará hacerlo con un '-' o '.' (aunque puede
- configurar el carácter utilizado).
- </para>
- <para>
- Como ejemplo, si se va a la acción en
- <methodname>FooBarController::bazBatAction()</methodname>
- ,
- se referirá a ella en la
- <acronym>URL</acronym>
- como
- <filename>/foo-bar/baz-bat</filename>
- o
- <filename>/foo.bar/baz.bat</filename>
- .
- </para>
- </note>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Action</classname>
- es el componente base del controlador de acción.
- Cada controlador es una sola clase que extiende la
- <classname>clase Zend_Controller_Action </classname>
- y debe contener uno o más métodos de acción.
- </para>
- </listitem>
- <listitem>
- <para>
- <classname>Zend_Controller_Response_Abstract</classname>
- define una clase base de respuesta utilizada para recoger y
- retornar respuestas de los controladores de acción.
- Recoge tanto a las cabeceras como al contenido del cuerpo.
- </para>
- <para>
- La clase de respuesta (response) por defecto es
- <classname>Zend_Controller_Response_Http</classname>
- ,
- la cual es adecuada para usarla en un entorno
- <acronym>HTTP</acronym>
- .
- </para>
- </listitem>
- </itemizedlist>
- <para>
- El flujo de procesos de
- <classname>Zend_Controller</classname>
- es relativamente
- sencillo. Una solicitud es recibida por
- <classname>Zend_Controller_Front</classname>
- , la que a su vez llama a
- <classname>Zend_Controller_Router_Rewrite</classname>
- para determinar qué controlador (y la acción en ese controlador)
- despachar.
- <classname>Zend_Controller_Router_Rewrite</classname>
- descompone la
- <acronym>URI</acronym>
- a fin de establecer el controlador y el nombre de
- acción en la solicitud.
- <classname>Zend_Controller_Front</classname>
- entonces entra al bucle del dispatch. Llama a
- <classname>Zend_Controller_Dispatcher_Standard</classname>
- ,
- el que pasa la solicitud para enviar al controlador y a la acción
- especificada en la
- solicitud (o el usado por defecto).
- Después de que el controlador ha terminado, el control
- vuelve a
- <classname>Zend_Controller_Front</classname>
- .
- Si el controlador ha indicado que debe enviarse otro controlador
- mediante el reinicio del
- estado de la condición de la solicitud,
- el bucle continúa y se ejecuta otro envio.
- En caso
- contrario el proceso termina.
- </para>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|