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

时间:2019-09-26 13:36:37

标签: symfony symfony-3.4

我可以创建一个新实体并添加其数据,如下所示:

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

这使用了我在实体类中定义的setter方法。

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

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

我有办法吗?

$foo->setData($data);

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

2 个答案:

答案 0 :(得分:1)

这很丑,但是在foo类中:

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

这显然绕开了设置者的逻辑,所以

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);
    }
}

这显然要求二传手确实存在...

您也可以按照他们评论中的建议使用serializer component。或者,您可以使用属性访问组件,该组件本身将找到正确的设置器或加法器。

答案 1 :(得分:0)

啊,实际上,我认为自己可以轻松添加它,这可能就是Symfony不提供开箱即用的东西的原因。只需将以下方法添加到实体类:

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