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 或加法器。
我可以像这样创建一个新实体并添加其数据:
$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 或加法器。