Zend Framework 2,当对象 属性 和数组键不匹配时如何水合?
Zend Framework 2, How do I hydrate when object property and array key don't match?
我有以下数组:
$arr = array(
'Profile' => 'myClient',
'Vendor' => 'myVendor',
);
以及以下class
class MyModel
{
protected $client;
protected $vendor;
getClient()
{
return $this->client;
}
setClient($client)
{
$this->client = $client;
}
getVendor()
{
return $this->vendor;
}
setVendor($vendor)
{
$this->vendor = $vendor;
}
}
注意数组和 class 都有 "vendor" 但数组有 "profile" 而 class 有 "client".
我想在 Zend Framework 2 中使用水化器通过水合物方法填充 MyModel 对象(示例假设水化器和 MyModel 原型已注入我的 class):
$obj = $this->hydrator->hydrate($arr, $this->myModelPrototype)
在转储 $obj 时您会看到:
MyModel Object
(
[client:protected] =>
[vendor:protected] => myVendor
)
然而,我想要的结果是这样的:
MyModel Object
(
[client:protected] => myClient
[vendor:protected] => myVendor
)
我的问题是,有没有什么方法可以自定义水化器,使其填充 "client" 属性 和 "Profile" 值?
起初,我以为我可以使用水化器策略,但它只能改变值,不能改变键。或者,也许这是我的应用程序中的某种设计缺陷,不应该有理由必须这样做?
感谢您的帮助/建议。
如果我理解你是正确的,你可以用 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 编写。
P.S.: 有当前命名策略的文档。我认为 MapNamingStrategy 符合您的需要。参见 http://framework.zend.com/manual/current/en/modules/zend.stdlib.hydrator.namingstrategy.mapnamingstrategy.html
HTH
我有以下数组:
$arr = array(
'Profile' => 'myClient',
'Vendor' => 'myVendor',
);
以及以下class
class MyModel
{
protected $client;
protected $vendor;
getClient()
{
return $this->client;
}
setClient($client)
{
$this->client = $client;
}
getVendor()
{
return $this->vendor;
}
setVendor($vendor)
{
$this->vendor = $vendor;
}
}
注意数组和 class 都有 "vendor" 但数组有 "profile" 而 class 有 "client".
我想在 Zend Framework 2 中使用水化器通过水合物方法填充 MyModel 对象(示例假设水化器和 MyModel 原型已注入我的 class):
$obj = $this->hydrator->hydrate($arr, $this->myModelPrototype)
在转储 $obj 时您会看到:
MyModel Object
(
[client:protected] =>
[vendor:protected] => myVendor
)
然而,我想要的结果是这样的:
MyModel Object
(
[client:protected] => myClient
[vendor:protected] => myVendor
)
我的问题是,有没有什么方法可以自定义水化器,使其填充 "client" 属性 和 "Profile" 值?
起初,我以为我可以使用水化器策略,但它只能改变值,不能改变键。或者,也许这是我的应用程序中的某种设计缺陷,不应该有理由必须这样做?
感谢您的帮助/建议。
如果我理解你是正确的,你可以用 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 编写。
P.S.: 有当前命名策略的文档。我认为 MapNamingStrategy 符合您的需要。参见 http://framework.zend.com/manual/current/en/modules/zend.stdlib.hydrator.namingstrategy.mapnamingstrategy.html
HTH