Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

request y isPost en ZF

Estas en el tema de request y isPost en ZF en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola He visto en manuales de ZF que utilizan $this->request->isPost() o $this->getRequest()->isPost(), Quisiera saber si alguien ayuda, como está construido el método isPost y getRequest ...
  #1 (permalink)  
Antiguo 25/01/2010, 12:36
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Pregunta request y isPost en ZF

Hola

He visto en manuales de ZF que utilizan $this->request->isPost() o $this->getRequest()->isPost(),
Quisiera saber si alguien ayuda, como está construido el método isPost y getRequest y que se almacena en tal caso en $this->request.

Saludos

Última edición por Fenris; 25/01/2010 a las 13:09
  #2 (permalink)  
Antiguo 25/01/2010, 13:16
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: request y isPost en ZF

Request es el objeto de la peticion al servidor. Por lo tanto isPost busca en la peticion al servidor el metodo de peticion:

Código PHP:
Ver original
  1. /**
  2.      * Was the request made by POST?
  3.      *
  4.      * @return boolean
  5.      */
  6.     public function isPost()
  7.     {
  8.         if ('POST' == $this->getMethod()) {
  9.             return true;
  10.         }
  11.  
  12.         return false;
  13.     }
__________________
I see dead pixels
  #3 (permalink)  
Antiguo 25/01/2010, 17:28
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: request y isPost en ZF

Hola

Gracias por responder, pero me surgen varias consultas mas:
  • Como obtengo ese objeto request y donde sera en el FrontController?
  • Si request es un objeto, isPost es un método de la misma clase donde se define request?
  • Que contiene el método $this->getMethod() y a que clase pertenece?
  • El método getRequest() que contiene, se define un request por cada peticion al servidor?
  • En que clase podría definir esos métodos.

Saludos y espero sus respuestas ya que serán de gran ayuda para entender mas ZF, POO y PHP.
  #4 (permalink)  
Antiguo 25/01/2010, 20:53
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: request y isPost en ZF

Toda esa información la encontraras mucho mejor explicada en el manual de Zend. Tambien puedes ver el camino que sigue una aplicación hecha en zend framework viendo que se ejecuta y como estan construidas las clases.
__________________
I see dead pixels
  #5 (permalink)  
Antiguo 26/01/2010, 00:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: request y isPost en ZF

Otra cosa, y es una de las ventajas es que Zend es opensource por lo que puedes el código fuente sin problemas.

Saludos.
  #6 (permalink)  
Antiguo 26/01/2010, 09:34
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: request y isPost en ZF

GatorV

Justamente eso estaba tratando de hacer mirando el código fuente de ZF para ver donde encuentro esa implementación pero no he dado con ella por ello es que consultaba aquí a ver que me podrían decir no solamente con el fin de ver código sino de entender como se manejan esas transacciones, peticiones al servidor, ya que no entiendo aun donde se genera ese objeto request, quien lo genera, y como sabe si es POST o GET, yo en los actions de mi implementación lo estaba haciendo simplemente asi :
if ($_POST && $_SERVER['REQUEST_METHOD']=='POST') -> proceso los datos del formulario según action. Pero me parece que hay mas concepto de POO y encapsulación en como lo implementa ZF en contraposición a lo que estoy haciendo yo por eso quería saber como lo hacia para entenderlo y aplicarlo a mi implementación.

Saludos
  #7 (permalink)  
Antiguo 26/01/2010, 09:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: request y isPost en ZF

Lo hace en el request default, lo puedes ver en el archivo Zend/Controller/Request/Http.php y tal cual la implementación es algo similar:
Código PHP:
Ver original
  1. /**
  2.      * Return the method by which the request was made
  3.      *
  4.      * @return string
  5.      */
  6.     public function getMethod()
  7.     {
  8.         return $this->getServer('REQUEST_METHOD');
  9.     }
  10.  
  11.     /**
  12.      * Was the request made by POST?
  13.      *
  14.      * @return boolean
  15.      */
  16.     public function isPost()
  17.     {
  18.         if ('POST' == $this->getMethod()) {
  19.             return true;
  20.         }
  21.  
  22.         return false;
  23.     }

Saludos.
  #8 (permalink)  
Antiguo 26/01/2010, 10:48
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: request y isPost en ZF

Gracias GatorV

Ya lo he encontrado solo busque mal, pero aun tengo mas consultas quizás puedan parecer obvias pero quiero entender bien el flujo de información, por ende quisiera saber si es así el flujo de información en un ejemplo hipotético.
  • Ingreso al index.php que carga la vista de listado de artículos
  • Luego en el menú busco agregar artículos. Donde aparece el formulario para agregar artículos a la bd.
  • Completo el formulario y presiono el boton "agregar" para enviar el formulario para ser procesado.
  • El FrontController captura la URI y de ella desprende el controlador(artículos) y el action(add).
  • Instancia el controlador y despacha a la accion solicitada que seria add por ejemplo.

Donde en toda esa ejecución creo un objeto Request, como lo creo, ese objeto se almacena en el registro? (patrón Registry) y luego en el action se llama de esta manera $this->request = Registry::get('request') ?; ya que en el action addAction yo debería usar if ($this->request->isPost())

Saludos cordiales y espero se entienda, lamento si les parece muy obvio pero necesito entender bien antes de programar.
  #9 (permalink)  
Antiguo 26/01/2010, 11:11
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: request y isPost en ZF

A mi entender el request no esta almacenado en el registro, este es manejado unicamente por el front controller (Zend/Controller/Front.php):

Código PHP:
Ver original
  1. /**
  2.      * Dispatch an HTTP request to a controller/action.
  3.      *
  4.      * @param Zend_Controller_Request_Abstract|null $request
  5.      * @param Zend_Controller_Response_Abstract|null $response
  6.      * @return void|Zend_Controller_Response_Abstract Returns response object if returnResponse() is true
  7.      */
  8.     public function dispatch(Zend_Controller_Request_Abstract $request = null, Zend_Controller_Response_Abstract $response = null)
  9.     {
  10.         if (!$this->getParam('noErrorHandler') && !$this->_plugins->hasPlugin('Zend_Controller_Plugin_ErrorHandler')) {
  11.             // Register with stack index of 100
  12.             require_once 'Zend/Controller/Plugin/ErrorHandler.php';
  13.             $this->_plugins->registerPlugin(new Zend_Controller_Plugin_ErrorHandler(), 100);
  14.         }
  15.  
  16.         if (!$this->getParam('noViewRenderer') && !Zend_Controller_Action_HelperBroker::hasHelper('viewRenderer')) {
  17.             require_once 'Zend/Controller/Action/Helper/ViewRenderer.php';
  18.             Zend_Controller_Action_HelperBroker::getStack()->offsetSet(-80, new Zend_Controller_Action_Helper_ViewRenderer());
  19.         }
  20.  
  21.         /**
  22.          * Instantiate default request object (HTTP version) if none provided
  23.          */
  24.         if (null !== $request) {
  25.             $this->setRequest($request);
  26.         } elseif ((null === $request) && (null === ($request = $this->getRequest()))) {
  27.             require_once 'Zend/Controller/Request/Http.php';
  28.             $request = new Zend_Controller_Request_Http();
  29.             $this->setRequest($request);
  30.         }
  31.  
  32.         /**
  33.          * Set base URL of request object, if available
  34.          */
  35.         if (is_callable(array($this->_request, 'setBaseUrl'))) {
  36.             if (null !== $this->_baseUrl) {
  37.                 $this->_request->setBaseUrl($this->_baseUrl);
  38.             }
  39.         }
  40.  
  41.         /**
  42.          * Instantiate default response object (HTTP version) if none provided
  43.          */
  44.         if (null !== $response) {
  45.             $this->setResponse($response);
  46.         } elseif ((null === $this->_response) && (null === ($this->_response = $this->getResponse()))) {
  47.             require_once 'Zend/Controller/Response/Http.php';
  48.             $response = new Zend_Controller_Response_Http();
  49.             $this->setResponse($response);
  50.         }
  51.  
  52.         /**
  53.          * Register request and response objects with plugin broker
  54.          */
  55.         $this->_plugins
  56.              ->setRequest($this->_request)
  57.              ->setResponse($this->_response);
  58.  
  59.         /**
  60.          * Initialize router
  61.          */
  62.         $router = $this->getRouter();
  63.         $router->setParams($this->getParams());
  64.  
  65.         /**
  66.          * Initialize dispatcher
  67.          */
  68.         $dispatcher = $this->getDispatcher();
  69.         $dispatcher->setParams($this->getParams())
  70.                    ->setResponse($this->_response);
  71.  
  72.         // Begin dispatch
  73.         try {
  74.             /**
  75.              * Route request to controller/action, if a router is provided
  76.              */
  77.  
  78.             /**
  79.             * Notify plugins of router startup
  80.             */
  81.             $this->_plugins->routeStartup($this->_request);
  82.  
  83.             $router->route($this->_request);
  84.  
  85.             /**
  86.             * Notify plugins of router completion
  87.             */
  88.             $this->_plugins->routeShutdown($this->_request);
  89.  
  90.             /**
  91.              * Notify plugins of dispatch loop startup
  92.              */
  93.             $this->_plugins->dispatchLoopStartup($this->_request);
  94.  
  95.             /**
  96.              *  Attempt to dispatch the controller/action. If the $this->_request
  97.              *  indicates that it needs to be dispatched, move to the next
  98.              *  action in the request.
  99.              */
  100.             do {
  101.                 $this->_request->setDispatched(true);
  102.  
  103.                 /**
  104.                  * Notify plugins of dispatch startup
  105.                  */
  106.                 $this->_plugins->preDispatch($this->_request);
  107.  
  108.                 /**
  109.                  * Skip requested action if preDispatch() has reset it
  110.                  */
  111.                 if (!$this->_request->isDispatched()) {
  112.                     continue;
  113.                 }
  114.  
  115.                 /**
  116.                  * Dispatch request
  117.                  */
  118.                 try {
  119.                     $dispatcher->dispatch($this->_request, $this->_response);
  120.                 } catch (Exception $e) {
  121.                     if ($this->throwExceptions()) {
  122.                         require_once 'Zend/Controller/Exception.php';
  123.                         throw new Zend_Controller_Exception($e->getMessage(), $e->getCode(), $e);
  124.                     }
  125.                     $this->_response->setException($e);
  126.                 }
  127.  
  128.                 /**
  129.                  * Notify plugins of dispatch completion
  130.                  */
  131.                 $this->_plugins->postDispatch($this->_request);
  132.             } while (!$this->_request->isDispatched());
  133.         } catch (Exception $e) {
  134.             if ($this->throwExceptions()) {
  135.                 require_once 'Zend/Controller/Exception.php';
  136.                 throw new Zend_Controller_Exception($e->getMessage(), $e->getCode(), $e);
  137.             }
  138.  
  139.             $this->_response->setException($e);
  140.         }
  141.  
  142.         /**
  143.          * Notify plugins of dispatch loop completion
  144.          */
  145.         try {
  146.             $this->_plugins->dispatchLoopShutdown();
  147.         } catch (Exception $e) {
  148.             if ($this->throwExceptions()) {
  149.                 require_once 'Zend/Controller/Exception.php';
  150.                 throw new Zend_Controller_Exception($e->getMessage(), $e->getCode(), $e);
  151.             }
  152.  
  153.             $this->_response->setException($e);
  154.         }
  155.  
  156.         if ($this->returnResponse()) {
  157.             return $this->_response;
  158.         }
  159.  
  160.         $this->_response->sendResponse();
  161.     }
  162. }
__________________
I see dead pixels
  #10 (permalink)  
Antiguo 26/01/2010, 11:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: request y isPost en ZF

El request se inicializa en el frontController, la firma del frontController es:
Código PHP:
Ver original
  1. public function dispatch(Zend_Controller_Request_Abstract $request = null, Zend_Controller_Response_Abstract $response = null)

Es decir tu le puedes pasar un objeto $request, si no lo haces, crea uno:
Código PHP:
Ver original
  1. /**
  2.          * Instantiate default request object (HTTP version) if none provided
  3.          */
  4.         if (null !== $request) {
  5.             $this->setRequest($request);
  6.         } elseif ((null === $request) && (null === ($request = $this->getRequest()))) {
  7.             require_once 'Zend/Controller/Request/Http.php';
  8.             $request = new Zend_Controller_Request_Http();
  9.             $this->setRequest($request);
  10.         }

Luego crea un dispatcher (por defecto esta en Zend/Controller/Dispatcher/Standard.php) y le pasa el $request que tiene el frontController. Posteriormente al crear el Controller pasa este objeto $request al controller y lo guarda en la variable $_request:
Código PHP:
Ver original
  1. /**
  2.      * Zend_Controller_Request_Abstract object wrapping the request environment
  3.      * @var Zend_Controller_Request_Abstract
  4.      */
  5.     protected $_request = null;

Por lo que tu dentro de tu action controller lo puedes leer ya sea usando $_request, o $this->getRequest().

Saludos.
  #11 (permalink)  
Antiguo 26/01/2010, 11:18
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: request y isPost en ZF

En este diagrama puedes ver la ruta que sigue una aplicacion de Zend:



Lo tome de esta web.

¿Será conveniente guardar esta imagen en algún lugar de este foro?
__________________
I see dead pixels
  #12 (permalink)  
Antiguo 26/01/2010, 13:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: request y isPost en ZF

Buen diagrama explica bien como funciona todo el proceso de Zend.

Saludos.

Etiquetas: request
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 21:06.