Ver índice de contenidos del libro

4.8. La petición y la respuesta

Cuando accedes a la página /job o /job/show/id/1 en tu navegador, estás interactuando con el servidor web. El navegador envía una petición y el servidor web devuelve una respuesta.

Como ya se ha visto en el código de los ejemplos anteriores, Symfony encapsula la petición en un objeto de tipo sfWebRequest (como se puede ver por ejemplo en la declaración del método executeShow()). Como Symfony es un framework orientado a objetos, la respuesta también es un objeto, en este caso de tipo sfWebResponse. Si quieres acceder al objeto de la respuesta desde la acción, puedes llamar al método $this->getResponse().

Estos dos objetos incluyen muchos métodos útiles para acceder a la información desde funciones y variables globales de PHP.

Nota ¿Cuál es el motivo por el que Symfony añade una capa de abstracción sobre algunas funcionalidades de PHP? En primer lugar, los métodos de Symfony son mucho más poderosos que los métodos equivalentes de PHP. En segundo lugar, porque cuando pruebas una aplicación es mucho más fácil simular una petición o una respuesta mediante un objeto, en vez de utilizar variables globales o funciones de PHP como header(), que ocultan gran parte de su funcionamiento interno.

4.8.1. La petición

La clase sfWebRequest encapsula los arrays globales $_SERVER, $_COOKIE, $_GET, $_POST y $_FILES:

Nombre del método Equivalente de PHP
getMethod() $_SERVER['REQUEST_METHOD']
getUri() $_SERVER['REQUEST_URI']
getReferer() $_SERVER['HTTP_REFERER']
getHost() $_SERVER['HTTP_HOST']
getLanguages() $_SERVER['HTTP_ACCEPT_LANGUAGE']
getCharsets() $_SERVER['HTTP_ACCEPT_CHARSET']
isXmlHttpRequest() $_SERVER['X_REQUESTED_WITH'] == 'XMLHttpRequest'
getHttpHeader() $_SERVER
getCookie() $_COOKIE
isSecure() $_SERVER['HTTPS']
getFiles() $_FILES
getGetParameter() $_GET
getPostParameter() $_POST
getUrlParameter() $_SERVER['PATH_INFO']
getRemoteAddress() $_SERVER['REMOTE_ADDR']

En el código de los ejemplos anteriores también se ha empleado el método getParameter(), que permite acceder a los parámetros de la petición. El valor que devuelve este método se obtiene de las variables globales $_GET y $_POST o de la variable PATH_INFO.

Si quieres asegurarte de que un parámetro de la petición viene específicamente de una de esas variables, puedes utilizar respectivamente los métodos getGetParameter(), getPostParameter() y getUrlParameter().

Nota Si quieres restringir una acción a un método específico, por ejemplo para asegurar que un formulario se ha enviado con el método POST, puedes utilizar el método isMethod() de la siguiente manera: $this->forwardUnless($request->isMethod('POST'));.

4.8.2. La respuesta

La clase sfWebResponse encapsula los métodos header() y setrawcookie() de PHP:

Nombre del método Equivalente de PHP
setCookie() setrawcookie()
setStatusCode() header()
setHttpHeader() header()
setContentType() header()
addVaryHttpHeader() header()
addCacheControlHttpHeader() header()

Obviamente, la clase sfWebResponse también incluye un método para establecer el contenido de la respuesta (setContent()) y otro para enviarla al navegador (send()).

En las secciones anteriores se ha mostrado cómo incluir hojas de estilos y archivos JavaScript tanto en el archivo view.yml como en las plantillas. En realidad, las dos técnicas utilizan los métodos addStylesheet() y addJavascript() del objeto de la respuesta.

Nota Las clases sfAction, sfRequest y sfResponse incluyen muchos otros métodos útiles. Puedes consultar la documentación de la API de Symfony 1.2 para aprenderlo todo sobre las clases internas de Symfony.