The first argument of any action method is the request object, called sfWebRequest in symfony. You're already familiar with the getParameter('myparam') method, used to retrieve the value of a request parameter by its name. Table 6-1 lists the most useful sfWebRequest methods.
Table 6-1 - Methods of the sfWebRequest Object
| Name | Function | Sample Output |
|---|---|---|
| Request Information | ||
isMethod($method) |
Is it a post or a get? | true or false |
getMethod() |
Request method | Returns sfRequest::GET or sfRequest::POST constants |
getMethodName() |
Request method name | 'POST' |
getHttpHeader('Server') |
Value of a given HTTP header | 'Apache/2.0.59 (Unix) DAV/2 PHP/5.1.6' |
getCookie('foo') |
Value of a named cookie | 'bar' |
isXmlHttpRequest()* |
Is it an Ajax request? | true |
isSecure() |
Is it an SSL request? | true |
| Request Parameters | ||
hasParameter('foo') |
Is a parameter present in the request? | true |
getParameter('foo') |
Value of a named parameter | 'bar' |
getParameterHolder()->getAll() |
Array of all request parameters | |
| URI-Related Information | ||
getUri() |
Full URI | 'http://localhost/frontend_dev.php/mymodule/myaction' |
getPathInfo() |
Path info | '/mymodule/myaction' |
getReferer()** |
Referrer | 'http://localhost/frontend_dev.php/' |
getHost() |
Host name | 'localhost' |
getScriptName() |
Front controller path and name | 'frontend_dev.php' |
| Client Browser Information | ||
getLanguages() |
Array of accepted languages | Array( [0] => fr [1] => fr_FR [2] => en_US [3] => en ) |
getCharsets() |
Array of accepted charsets | Array( [0] => ISO-8859-1 [1] => UTF-8 [2] => * ) |
| getAcceptableContentTypes() | Array of accepted content types | Array( [0] => text/xml [1] => text/html |
** Sometimes blocked by proxies
For multipart requests to which users attach files, the sfWebRequest object provides a means to access and move these files, as shown in Listing 6-14. These methods are deprecated in symfony 1.1 (see the form framework and the sfValidatorFile class for more information).
Listing 6-14 - The sfWebRequest Object Knows How to Handle Attached Files
class mymoduleActions extends sfActions { public function executeUpload($request) { if ($request->hasFiles()) { foreach ($request->getFileNames() as $uploadedFile) { $fileName = $request->getFileName($uploadedFile); $fileSize = $request->getFileSize($uploadedFile); $fileType = $request->getFileType($uploadedFile); $fileError = $request->hasFileError($uploadedFile); $uploadDir = sfConfig::get('sf_upload_dir'); $request->moveFile($uploadedFile, $uploadDir.'/'.$fileName); } } } }
You don't have to worry about whether your server supports the $_SERVER or the $_ENV variables, or about default values or server-compatibility issues--the sfWebRequest methods do it all for you. Besides, their names are so evident that you will no longer need to browse the PHP documentation to find out how to get information from the request.
NOTE
The code above uses the $fileName as it was when the file was uploaded. As there is a small chance that this gets exploited by sending files with malicious file names, you always should normalize the target filename or generate it.