Ya se ha presentado anteriormente el método getRequestParameter('miparametro')
, utilizado para obtener el valor del parámetro de una petición por su nombre. De hecho, este método es una forma rápida equivalente a la sucesión de llamadas al contenedor de los parámetros de la petición getRequest()->getParameter('miparametro')
. La clase de la acción accede al objeto de la petición, llamado sfWebRequest
en Symfony, y a todos sus métodos, mediante el método getRequest()
. La tabla 6-1 lista los métodos más útiles de sfWebRequest
.
Tabla 6-1. Métodos del objeto sfWebRequest
Nombre | Función | Ejemplo de salida producida |
---|---|---|
Información sobre la petición | ||
getMethod() |
Método de la petición | Devuelve la constante sfRequest::GET o sfRequest::POST |
getMethodName() |
Nombre del método de petición | POST |
getHttpHeader('Server') |
Valor de una cabecera HTTP | Apache/2.0.59 (Unix) DAV/2 PHP/5.1.6 |
getCookie('foo') |
Valor de una cookie | valor |
isXmlHttpRequest() (1) |
¿Es una petición AJAX? | true |
isSecure() |
¿Es una petición SSL? | true |
Parámetros de la petición | ||
hasParameter('parametro') |
¿Existe el parámetro en la petición? | true |
getParameter('parametro') |
Valor del parámetro | valor |
getParameterHolder()->getAll() |
Array de todos los parámetros de la petición | |
Información relacionada con la URI | ||
getUri() |
URI completa | http://localhost/miaplicacion_dev.php/mimodulo/miaccion |
getPathInfo() |
Información de la ruta | /mimodulo/miaccion |
getReferer() (2) |
Valor del "referer" de la petición | http://localhost/miaplicacion_dev.php/ |
getHost() |
Nombre del Host | localhost |
getScriptName() |
Nombre y ruta del controlador frontal | miaplicacion_dev.php |
Información del navegador del cliente | ||
getLanguages() |
Array de los lenguajes aceptados | Array( [0] => fr [1] => fr_FR [2] => en_US [3] => en ) |
getCharsets() |
Array de los juegos de caracteres aceptados | Array( [0] => ISO-8859-1 [1] => UTF-8 [2] => * ) |
getAcceptableContentType() |
Array de los tipos de contenidos aceptados | Array( [0] => text/xml [1] => text/html |
(1) Funciona con Prototype, Mootools y jQuery (2) Si se utilizan proxys, su valor puede ser inaccesible
La clase sfActions
ofrece algunos atajos para acceder a los métodos de la petición más rápidamente, como se muestra en el listado 6-15.
Listado 6-15 - Accediendo a los métodos del objeto sfRequest
desde una acción
class mimoduloActions extends sfActions
{
public function executeIndex()
{
$tieneParametro = $this->getRequest()->hasParameter('parametro');
$tieneParametro = $this->hasRequestParameter('parametro'); // Versión corta
$parametro = $this->getRequest()->getParameter('parametro');
$parametro = $this->getRequestParameter('parametro'); // Versión corta
}
}
Para peticiones de tipo multipart utilizadas cuando el usuario adjunta archivos, el objeto sfWebRequest
provee medios para acceder y mover estos archivos, como se muestra en el listado 6-16.
Listado 6-16 - El objeto sfWebRequest
sabe cómo manejar archivos adjuntos
class mimoduloActions extends sfActions
{
public function executeUpload()
{
if ($this->getRequest()->hasFiles())
{
foreach ($this->getRequest()->getFileNames() as $archivoSubido)
{
$nombreArchivo = $this->getRequest()->getFileName($archivoSubido);
$tamanoArchivo = $this->getRequest()->getFileSize($archivoSubido);
$tipoArchivo = $this->getRequest()->getFileType($archivoSubido);
$archivoErroneo = $this->getRequest()->hasFileError($archivoSubido);
$directorioSubidas = sfConfig::get('sf_upload_dir');
$this->getRequest()->moveFile($archivoSubido, $directorioSubidas.'/'.$nombreArchivo);
}
}
}
}
No tienes que preocuparte sobre si el servidor soporta las variables de PHP $_SERVER
o $_ENV
, o acerca de valores por defecto o problemas de compatibilidad del servidor, ya que los métodos de 'sfWebRequest
lo hacen todo por tí. Además sus nombres son tan evidentes que no es necesario consultar la documentación de PHP para descubrir cómo obtener información sobre la petición.
Nota El código del ejemplo anterior utiliza como nombre del archivo el mismo nombre del archivo subido por el usuario. Existe la posibilidad de que un usuario malintencionado envíe un archivo con un nombre especialmente preparado para aprovechar algún agujero de seguridad, por lo que es recomendable que generes de forma automática y/o normalices el nombre de todos los archivos subidos.