无法访问ZF2请求对象的某些属性

时间:2012-07-10 09:02:22

标签: php zend-framework2

我目前正在测试ZF2 beta4,我在从控制器访问某些请求属性时遇到了一些问题。

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 \支持:: getQueryParams()

从那里我有几个问题:
- 我做错了什么?
如果不是:
- 我如何访问queryParams属性?
- 通常不使用方法来访问某些属性(如果是这样,如果我无法访问它们,那么拥有这些属性的重点是什么?)

2 个答案:

答案 0 :(得分:2)

您转储的所有属性都受到保护,这就是您需要getter来获取其值的原因。

某些属性的现有getter并不意味着它们对所有属性都存在:)

如果您查看Zend\Http\Request的来源(由Zend\Http\PhpEnvironment\Request继承),您会发现用于访问查询参数的方法名称为query()

注意:我同意这有点不一致。

警告:自beta5以来已经更改,现在是getQuery()

受保护和私有成员用于确保不会直接访问数据。

它主要用于内部使用,或提供公共setter / getter以允许转换,错误检查等。

例如,您可能想要添加类型提示。

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.

答案 1 :(得分:-2)

  • 没有
  • getQuery()
  • 供内部使用