【发布时间】:2014-05-29 12:08:08
【问题描述】:
我正在使用 symfony 和教义。
服务器收到对 URL /company/{id} 的 HTTP PATCH 请求,其中包含模型的属性及其值,例如 {"name": "My new name"} 新值需要持久化到数据库中。
$request = Request::createFromGlobals();
$requestContentJSON = $request->getContent();
$requestContentObj = json_decode($requestContentJSON);
$repository = $this->getDoctrine()->getRepository('MyBundle:Company');
$company = $repository->find($id);
现在我可以输入$company->setName($requestContentObj[0]);,但收到的属性会有所不同。现在我正在使用以下代码来处理每个属性:
foreach($requestContentObj as $key => $value){
switch($key){
case 'name':
$company->setName($value);
break;
case 'department':
$company->setDepartment($value);
break;
case 'origin':
$company->setOrigin($value);
break;
case 'headquarters':
$company->setHeadquarters($value);
break;
case 'email':
$company->setEmail($value);
break;
case 'twitterid':
$company->setTwitterId($value);
break;
case 'description':
$company->setDescription($value);
break;
}
}
但这看起来不太聪明,尤其是因为我知道我将拥有其他实体,如新闻、产品、用户等,它们的属性将以相同的方式更新。我想做这样的事情:
$company->set("property", "value");
我首先想到的是将这个 switch 语句放在这个 set 函数中的 company 类中,以及我拥有的所有其他实体类中。但是有更好的方法吗?也许 symfony/doctrine 已经内置了解决方案,但我没有找到适合我的解决方案。
我仍然想使用 setter 和 getter 作为长期投资。
谢谢。
【问题讨论】: