我目前正在测试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
属性?
- 通常不使用方法来访问某些属性(如果是这样,如果我无法访问它们,那么拥有这些属性的重点是什么?)
答案 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)