web-dev-qa-db-ja.com

Zend Framework:GETパラメータを取得できますか?

Zend Frameworkでは、ほとんどの場合、パラメーターを取得するために、

// from controller
$this->getRequest()->getParam('key');

しかし、「Zend」の方法を使用してGETパラメータだけを取得するにはどうすればよいですか?または、$_GETを使用しますか?違いはありますか

$this->getRequest()->getParam('key');

vs

$_GET['key'];
11
Jiew Meng

getQuery()を使用します:

_$this->_request->getQuery('key');
_

利用可能な他の方法が含まれます

  • getParam()
  • getQuery()
  • getPost()
  • getCookie()
  • getServer()
  • getEnv()

getParam()は、最初にユーザーパラメータをチェックし、次に$ _GET、次に$ _POSTをチェックして、最初に見つかった一致またはnullを返します。

スーパーグローバルに直接アクセスしないようにしてください。

35
Ryan Chouinard

主な違いは

$_GET['key'];

環境への依存です。スーパーグローバルが使用可能であり、その名前のキーが含まれている必要があります。また、単純な配列アクセスでもありますが、

$this->getRequest()->getParam('key');

aPIメソッド呼び出しです。リクエストへのアクセスは抽象化されています。実際の環境への依存はありません。 Requestオブジェクトはモックである可能性があります。 getParamメソッドは、それが$_GETまたは$_POSTのどちらからのものであるかに関係なく、常に値を返します。

リクエストの上に抽象化を配置すると、デカップリングが増え、依存関係が少なくなり、アプリケーションのテストと保守が容易になるため、より優れています。

13
Gordon

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);
}
_
0
algorhythm

Zend 2の詳細なデータバインディングドキュメント を調べた後、自動的にアクセス可能な Paramsプラグイン を介してルートからパラメーターにアクセスするのが最善であることがわかりました。このプラグインを利用すると、コントローラー内から以下のようなパラメーターを取得できます。

$this->params('key');
0
Tigerman55