25

Can anyone explain the differences both functionally and in terms of good/bad practice whhy one of these should be preferred over the other:

$getParam = Mage::app()->getRequest()->getParam('getparam'); 

v

$getParam = $_GET['getparam']; 
0

2 Answers 2

39

There is a significant difference between the two. $_GET is simply an array, like $_POST. However, calling Mage::app()->getRequest()->getParam('param_name') will give you access to both GET and POST (DELETE and PUT are not included here) - see code below:

lib/Zend/Controller/Request/Http.php public function getParam($key, $default = null) { $keyName = (null !== ($alias = $this->getAlias($key))) ? $alias : $key; $paramSources = $this->getParamSources(); if (isset($this->_params[$keyName])) { return $this->_params[$keyName]; } elseif (in_array('_GET', $paramSources) && (isset($_GET[$keyName]))) { return $_GET[$keyName]; } elseif (in_array('_POST', $paramSources) && (isset($_POST[$keyName]))) { return $_POST[$keyName]; } return $default; } 

In addition, if the system sets other params with Mage::app()->getRequest()->setParam(), it becomes accessible via the getParam() function. In Magento you want to always use getParam().

Sign up to request clarification or add additional context in comments.

4 Comments

Also gives access to params parsed from the url e.g. site.com/foo/bar/baz/bip/bop/boom/bum would have params bip = bop and boom = bum
Ah, yes - can't believe I missed that :)
And what exacly IS a "param", if not a request parameter (part of the url)? Why would you use setParam()?
A param in Magento is a helper for a combined array of the values found in the url, GET and POST variables. I don't see much usage for setParam() other than to filter or parse values before they get to the system (in a predispatch observer). That isn't something that is used often, but it is helpful when you need it.
6
Mage::app()->getRequest()->getParam('getparam'); 

Will return you 'getparam' if it is send with GET, POST (not sure about DELETE, PUT ...) request. Did not work with Magento but if there parameters that sent through routing. I would expect them also being accessible through that function.

$_GET contains only parameters sent through GET

$_POST contains only parameters sent through POST

2 Comments

$_GET contains params from the querystring regardless of request method. $_POST contains params from the request body if the Content-Type header of the request was application/x-www-form-urlencoded and the request method was POST
You can POST Content type json ;)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.