我可以创建一个新实体并添加其数据,如下所示:
$foo = new Foo();
$foo->setName('Abc');
$foo->setYear('1994');
这使用了我在实体类中定义的setter方法。
但是,让我们假设我有这个数组:
$array = array('name' => 'Abc', 'year' => '1994');
我有办法吗?
$foo->setData($data);
理想情况下,所有单独的数组条目都应添加到实体中,就像在我第一个手动进行的示例中一样。
答案 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;
}
}