我有以下数组:
$arr = array(
'Profile' => 'myClient',
'Vendor' => 'myVendor',
);
以及以下类别的
class MyModel
{
protected $client;
protected $vendor;
getClient()
{
return $this->client;
}
setClient($client)
{
$this->client = $client;
}
getVendor()
{
return $this->vendor;
}
setVendor($vendor)
{
$this->vendor = $vendor;
}
}
请注意,数组和类都有"vendor",但数组有"profile",而类有"client"。
我想在Zend Framework 2中使用hydrate方法来填充MyModel对象(示例假设一个hydrator和一个MyModel原型已经注入到我的类中):
$obj = $this->hydrator->hydrate($arr, $this->myModelPrototype)
做$obj的转储你会期望看到这个:
MyModel Object
(
[client:protected] =>
[vendor:protected] => myVendor
)
然而,我想要的结果是:
MyModel Object
(
[client:protected] => myClient
[vendor:protected] => myVendor
)
我的问题是,有没有任何方法可以自定义hydrator,使其使用"Profile"值填充"client"属性?
起初,我认为我可以使用水合策略,但这只能改变值,而不能改变键。或者,也许这是我的应用程序中的某种设计缺陷,永远不应该有这样做的理由?
谢谢你的帮助/建议。
如果我理解你是正确的,你可以用NamingStrategy解决你的问题。ZF2提供了一些命名策略,这些策略在几个水合器中使用。不幸的是,我没有找到任何关于这方面的文档。您可以找到现有的命名策略https://github.com/zendframework/zend-stdlib/tree/master/src/Hydrator/NamingStrategy在这里
这里提供了一个如何设置自己的自定义命名策略的示例http://blog.igorvorobiov.com/2014/12/29/advanced-hydrator-usage-in-zend-framework-2/由Igor Vorobiov撰写。
附言:有关于当前命名策略的文档。我认为MapNamingStrategy符合您的需求。请参阅http://framework.zend.com/manual/current/en/modules/zend.stdlib.hydrator.namingstrategy.mapnamingstrategy.html
HTH