Symfony 3.4:为实体设置多个属性?

Symfony 3.4: Set multiple properties for entity?

我可以像这样创建一个新实体并添加其数据:

$foo = new Foo();
$foo->setName('Abc');
$foo->setYear('1994');

这是使用我在实体 class 中定义的 setter 方法。

但是,假设我有这个数组:

$array = array('name' => 'Abc', 'year' => '1994');

我有办法做到这一点吗:

$foo->setData($data);

理想情况下,所有单独的数组条目都应添加到实体中,就像我在第一个示例中手动添加的那样。

啊,实际上,我想我可以很容易地自己添加它,这可能就是为什么 Symfony 不提供开箱即用的东西的原因。只需将以下方法添加到实体 class:

public function setData($data)
{
    foreach ($data as $key => $value)
    {
        $this->$key = $value;
    }
}

它很丑但是,在 foo class:

function setData(array $data) {
    foreach($data as $key => $value) {
        $this->$key = $value;
    }
}

这显然绕过了 setter 逻辑,所以

function setData(array $data) {
    foreach($data as $key => $value) {
        $func = 'set'.ucfirst($key);
        $this->$func($value);
    }
}

你甚至可以写一些全局的

function setDataOnObject(array $data, object $object) {
    foreach($data as $key => $value) {
        $func = 'set'.ucfirst($key);
        $object->$func($value);
    }
}

这显然都需要 setter 确实存在...

您也可以按照 enricog 在他们的评论中建议的那样使用 serializer component。或者您可以使用 属性 访问组件,它自己会找到正确的 setter 或加法器。