我环顾四周太久了,但没有运气。我的情况是,我有一个有点大的表 +60 列,在 Doctrine Entity 中表示。在 FosREST 上工作,我想要实现的是,我想发送带有特定数据的 JSON,例如
[phone] => new_phone
[name] => new_name
[id] => 1
正如我所说,该实体包含 60 多个列,例如地址、图片、类别等......
电话、姓名和 ID 不是我每次都想更改的内容,但我每次都想更改一些列。
因此,有时我可能想更新电话和名称,其他时候我想更改类别,第三次我想更改类别、照片和地址
那么有这样的事情吗?
$entity->update($parameters);
其中 $parameters 如前所述动态更改。
附:我知道我可以用类似的东西构建一个很长的函数
if(isset($parameters['name']){
$entity->setName($parameters['name']);
}
但是对于 60 个 if,这听起来很愚蠢,有人还有其他方法吗?
谢谢
1)如果参数以属性命名(这里用下划线注释),可以这样做
use Doctrine\Common\Util\Inflector;
// ...
public function setParameters($params) {
foreach ($params as $k => $p) {
$key = Inflector::camelize($k);
if (property_exists($this, $key)) {
$this->$key = $p;
}
}
return $this;
}
2)与二传手同样的事情
use Doctrine\Common\Util\Inflector;
// ...
public function setParameters($params) {
foreach ($params as $k => $p) {
$key = Inflector::camelize($k);
if (property_exists($this, $key)) {
$this->{'set'.ucfirst($key)}($p); // ucfirst() is not required but I think it's cleaner
}
}
return $this;
}
3)如果名称不同,您可以这样做:
public function setParameters($params) {
foreach ($params as $k => $p) {
switch $k {
case 'phone':
$this->phoneNumber = $p;
break;
// ...
}
}
return $this;
}
编辑:最好的方法是第二个,但您应该定义白名单或黑名单,以避免用户更新您不希望他更新的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)