我正在使用symfony和doctrine。
服务器收到了一个HTTP PATCH请求,URL为/company/{id},包含一个模型属性及其值,如{"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 函数内,并将其放在我拥有的所有其他实体类中。但是否有更好的方法呢?也许 symfony/doctrine 已经内置了解决方案,但我没有找到适合我的东西。
我仍然希望使用 setter 和 getter 作为长期投资。
谢谢。
ucfirst()
,因为 PHP 方法和函数调用实际上是不区分大小写的! - Darragh Enrightmethod_exists()
。 - GusDeCooL