在Zend Framework中,大部分时间来获得一个参数,我将使用
// from controller
$this->getRequest()->getParam('key');
但我如何才能使用'Zend'方式获得GET参数?或者我只使用$_GET
?
$this->getRequest()->getParam('key');
vs
$_GET['key'];
答案 0 :(得分:33)
使用getQuery()
:
$this->_request->getQuery('key');
其他可用方法包括
getParam()
首先检查用户参数,然后检查$ _GET,然后检查$ _POST,返回找到的第一个匹配项或null。
尽量避免直接访问超全球。
答案 1 :(得分:12)
主要区别在于
$_GET['key'];
是对环境的依赖。它要求超全局可用并包含该名称的密钥。它也只是一个简单的数组访问,而
$this->getRequest()->getParam('key');
是一种API方法调用。对请求的访问是抽象的。不依赖于实际环境。 Request对象可以是mock。无论是getParam
还是$_GET
,$_POST
方法都会返回一个值。
在Request之上放置一个抽象更好,因为它允许更多的解耦,更少的依赖性,因此使您的应用程序更容易测试和维护。
答案 2 :(得分:1)
这适用于ZF2
$this->params()->fromQuery('key', 1); // second argument is optional default paramter
答案 3 :(得分:0)
在研究Zend 2's in depth data binding documentation后,我发现最好通过自动访问的Params plugin访问路线中的参数。利用此插件,您可以从控制器中获取如下所示的参数。
$this->params('key');
答案 4 :(得分:0)
在Zend Framework 1中,有两种定义“可见”参数的可能性。
https://subdomain.domain.tld(/ module)/ controller / name / parameter1 / value1 https://subdomain.domain.tld(/ module)/ controller / name /?parameter2 = value2
第一个parameter1
是URL路径的一部分,第二个parameter2
是真实的GET
参数。如果调用$request->getParams()
,则两者都将返回。但是使用parameter2
时仅返回$request->getQuery()
。因为parameter1
不是查询的一部分。它是url的一部分,符合逻辑。
现在,我喜欢Ryan Chouinard
的答案,如何用parameter2
获得$request->getQuery()
。但是parameter1
的行为就像一个GET
参数,我想这样对待它们。那么如何从帖子数据中获取可见的parameter1
和parameter2
而不是其他隐藏的parameter3
?
我唯一的解决方案是一个助手,该助手将克隆请求并将所谓的paramSources
(默认值:['_GET', '_POST']
)更改为['_GET']
,然后按常规使用getParam()
。
/**
* @param Zend_Controller_Request_Http $request
* @param string $param
* @param mixed|null $default
*
* @return mixed|null
*/
function getVisibleParam(string $param, $default = null, Zend_Controller_Request_Http $request = null)
{
if (
!$request &&
!($request = Zend_Controller_Front::getInstance()->getRequest())
) {
throw new \RuntimeException('There is no request. Are you in a wrong context?');
}
$_request = clone $request;
$_request->setParamSources(['_GET']);
return $_request->getParam($param, $default);
}