1

現在 beta4 をテストZF2していますが、コントローラーから一部のリクエスト プロパティにアクセスする際に問題が発生しています。

の内部からindexAction()、リクエスト オブジェクトに対して取得したものの抜粋を次に示します。

var_dump($this->request);私に与えます:

object(Zend\Http\PhpEnvironment\Request)#119 (14) {

  ["baseUrl":protected]=>
    string(0) ""

  [...]

  ["version":protected]=>
    string(3) "1.1"

  ["queryParams":protected]=>
    object(Zend\Stdlib\Parameters)#122 (1) {
      ["storage":"ArrayObject":private]=>
      array(3) {
        ["q"]=>
        string(0) ""
        ["param1"]=>
        string(6) "value1"
        ["param2"]=>
        string(6) "value2"
      }
    }

プロパティのいくつかにアクセスできます:
var_dump($this->request->getBaseUrl()); -> string(0) ""
var_dump($this->request->getVersion()); ->string(3) "1.1"

しかし、$this->request->getQueryParams()返品など、他の人に問題があります。

未定義のメソッド Zend\Http\PhpEnvironment\Request::getQueryParams() の呼び出し

そこから、いくつか質問があります:
-何か間違ったことをしていますか?
そうでない場合: -どうすればプロパティ
にアクセスできqueryParamsますか?
-特定のプロパティにアクセスするためのメソッドを持たないのが一般的ですか?

4

2 に答える 2

2

ダンプしたすべてのプロパティは保護されているため、値をフェッチするためにゲッターが必要でした。

一部のプロパティの既存のゲッターは、それらがすべてに存在することを意味するわけではありません:)

Zend\Http\Request(によって継承される)のソースをZend\Http\PhpEnvironment\Request見ると、クエリパラメータへのアクセスに使用されるメソッド名が次のようになっていることがわかります。query()

:私はそれが少し矛盾していることに同意します。

警告:beta5から変更されており、現在はgetQuery()

保護されたメンバーとプライベートメンバーは、データに直接アクセスされないようにするために使用されます。

これは主に内部使用のみに使用されるか、変換、エラーチェックなどを可能にするパブリックセッター/ゲッターが提供されます。

たとえば、型ヒントを追加したい場合があります。

class Car {

    public $engine;
}

$car = new Car();
$car->engine = new Truck();

// Having a public member doesn't allow me to check for valid type (I don't want a `Truck` to be set in place of an `Engine`)

class Car {
    private $engine;

    public setEngine(Engine $engine)
    {
        $this->engine = $engine;
        // Add additional code here
        $this->engine->warmUp();
    }
}

// Here I use type hinting to ensure validity of data, I also warmUp the Engine just after setting it.
于 2012-07-10T09:09:55.330 に答える
-2
  • 番号
  • getQuery()
  • 内部使用のため
于 2012-07-10T09:09:22.200 に答える