1

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

从那里我有几个问题:-
我做错了吗?
如果没有:
- 我如何才能访问该queryParams物业?
- 没有访问某些属性的方法是常见的做法吗(如果是这样,如果我无法访问它们,那么拥有这些属性有什么意义)?

4

2 回答 2

2

您转储的所有属性都受到保护,这就是为什么您需要一个 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.
于 2012-07-10T09:09:55.330 回答
-2
  • 获取查询()
  • 供内部使用
于 2012-07-10T09:09:22.200 回答