Symfony 使用变量名调用setter方法

Symfony 使用变量名调用setter方法,symfony,doctrine-orm,fosrestbundle,jmsserializerbundle,Symfony,Doctrine Orm,Fosrestbundle,Jmsserializerbundle,我想问的是一些奇怪的问题。我正在使用Symfony2和Doctrine2。要绕过FOSRestBundle和JMSBundle(不喜欢复合主键)之间的问题,我需要知道是否可能——以及如何——从字段名称调用setter 这里有一个例子:假设我的产品实体有一个由3个字段组成的主键。 诀窍是将这种JSON数组发送到我的API REST中: { "id": { "field1": "xxx", "field2": "...", "field3": "..." }, /

我想问的是一些奇怪的问题。我正在使用Symfony2和Doctrine2。要绕过FOSRestBundle和JMSBundle(不喜欢复合主键)之间的问题,我需要知道是否可能——以及如何——从字段名称调用setter

这里有一个例子:假设我的产品实体有一个由3个字段组成的主键。 诀窍是将这种JSON数组发送到我的API REST中:

{
  "id": {
    "field1": "xxx",
    "field2": "...",
    "field3": "..."
  },
  // other fields
}
然后我使用json_decode()来提取ID字段。我用3个主键创建了一个$key=>$value的表。这是我的问题,对于这个表,我希望在foreach循环中执行类似$myEntity->set$KEY($VALUE)的操作

我这样做是因为我想在我所有的实体中重用这些代码。 我知道这是一件非常奇怪的事情,总而言之,我要调用的对象字段/属性的名称是适当的setter()

谢谢;-)


PS:抱歉,如果我的英语不完美,这不是我的出生语言。

您可以在PHP中使用动态方法名称:

$myEntity->{'set'.$KEY}($VALUE);
或更可读的版本:

$method = 'set'.$KEY;
$myEntity->$method($VALUE);
别忘了检查方法是否存在:

$method = 'set'.$KEY;
if (!method_exists($myEntity, $method))
  throw new \Exception('Something bad');
$myEntity->$method($VALUE);

你是我的英雄,干得好!多亏了你,话题结束了。