Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Magento getParam v $_GET

Tags:

php

magento

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'];
like image 884
Marty Wallace Avatar asked Nov 23 '12 18:11

Marty Wallace


2 Answers

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().

like image 169
Joseph at SwiftOtter Avatar answered Nov 20 '22 14:11

Joseph at SwiftOtter


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

like image 6
E_p Avatar answered Nov 20 '22 13:11

E_p