Zend Frameworkでは、ほとんどの場合、パラメーターを取得するために、
// from controller
$this->getRequest()->getParam('key');
しかし、「Zend」の方法を使用してGETパラメータだけを取得するにはどうすればよいですか?または、$_GET
を使用しますか?違いはありますか
$this->getRequest()->getParam('key');
vs
$_GET['key'];
getQuery()
を使用します:
_$this->_request->getQuery('key');
_
利用可能な他の方法が含まれます
getParam()
は、最初にユーザーパラメータをチェックし、次に$ _GET、次に$ _POSTをチェックして、最初に見つかった一致またはnullを返します。
スーパーグローバルに直接アクセスしないようにしてください。
主な違いは
$_GET['key'];
環境への依存です。スーパーグローバルが使用可能であり、その名前のキーが含まれている必要があります。また、単純な配列アクセスでもありますが、
$this->getRequest()->getParam('key');
aPIメソッド呼び出しです。リクエストへのアクセスは抽象化されています。実際の環境への依存はありません。 Requestオブジェクトはモックである可能性があります。 getParam
メソッドは、それが$_GET
または$_POST
のどちらからのものであるかに関係なく、常に値を返します。
リクエストの上に抽象化を配置すると、デカップリングが増え、依存関係が少なくなり、アプリケーションのテストと保守が容易になるため、より優れています。
Zend Framework 1では、「可視」パラメーターを定義するための2つの可能性があります。
https://subdomain.domain.tld(/ module)/ controller/name/parameter1/value1https://subdomain.domain.tld(/ module)/ controller/name/?parameter2 = value2
最初の_parameter1
_はURLパスの一部であり、2番目の_parameter2
_は実際のGET
パラメーターです。 $request->getParams()
を呼び出すと、両方が返されます。ただし、$request->getQuery()
を使用すると、_parameter2
_のみが返されます。 _parameter1
_はURLのクエリ部分の一部ではないため、論理的です。
さて、$request->getQuery()
で_Ryan Chouinard
_を取得する方法_parameter2
_の答えが好きです。しかし、_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);
}
_
Zend 2の詳細なデータバインディングドキュメント を調べた後、自動的にアクセス可能な Paramsプラグイン を介してルートからパラメーターにアクセスするのが最善であることがわかりました。このプラグインを利用すると、コントローラー内から以下のようなパラメーターを取得できます。
$this->params('key');