Php 水合对象不';活不下去
我从Php 水合对象不';活不下去,php,zend-framework2,Php,Zend Framework2,我从abstractor派生了我的类,我试图获得如下数据: public function hydrate (array $data, $object) { foreach ($data as $key => $value) { $property = $this->getStrategy('default')->hydrate($key); $object->$property = $value; } var_du
abstractor
派生了我的类,我试图获得如下数据:
public function hydrate (array $data, $object)
{
foreach ($data as $key => $value) {
$property = $this->getStrategy('default')->hydrate($key);
$object->$property = $value;
}
var_dump($object);
return $object;
}
var_dump
返回一个包含填充值的有效对象,但是,使用这些返回值从JsonModel
创建的结果(json)返回一个数量等于表行的null
s数组
这是我的工厂配置:
'UserTableGateway' => function ($sm)
{
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$hydrator = new \Core\Hydrator\TableEntityMapper();
$hydrator->addStrategy('default', new UserNamingStrategy());
$resultSet = new \Zend\Db\ResultSet\HydratingResultSet(
$hydrator, new User());
return new TableGateway('users', $dbAdapter, null, $resultSet);
}
要使
$object
在返回后继续生存,我应该做什么?例如,当我尝试使用带有getter和setter的ClassMethods
hydrator时,它工作得非常好,因此我假设问题在于这个类。看起来您对$property
值使用的是“hydration策略”,而不是“命名策略”
这种混淆是可以理解的,但要清楚,“命名策略”用于修改目标对象属性名称,“策略”用于修改给定字段的值
首先,更改工厂并改用abstractor
的setNamingStrategy()
方法
'UserTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$hydrator = new \Core\Hydrator\TableEntityMapper();
// UserNamingStrategy should be of type NamingStrategyInterface
$hydrator->setNamingStrategy(new UserNamingStrategy());
$resultSet = new \Zend\Db\ResultSet\HydratingResultSet($hydrator, new User());
return new TableGateway('users', $dbAdapter, null, $resultSet);
}
然后更新水合器,检查命名策略和水合值策略,如果发现,则应用它们。abstractor
具有方便的方法和方法
public function hydrate (array $data, $object)
{
foreach ($data as $name => $value) {
$property = $this->hydrateName($name);
// $data is optionally passed in as context
$object->$property = $this->hydrateValue($name, $value, $data);
}
return $object;
}
当然,您可以使用
extract()
与此相反,我不知道这是否适用于其他ViewModel
s,但在某个时候,我突然想到了一些明显的事情
也就是说,JsonModel
既需要hydrate
,以便在获取数据时填充对象,也需要extract
,因为JsonModel
需要实现一个数组
如果未能交付提取
的实现,对象将以原始形式返回数组
,并且JsonModel
将每个对象转换为null
对象