Symfony 3.4: установить несколько свойств для объекта? - PullRequest
1 голос
/ 26 сентября 2019

Я могу создать новую сущность и добавить ее данные следующим образом:

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

Это использует методы установки, которые я определил в своем классе сущности.

Однако давайтепредположим, что у меня есть этот массив:

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

Есть ли способ для меня сделать это:

$foo->setData($data);

В идеале все отдельные записи массива должны быть добавлены к сущности, так же, какв моем первом примере, где я сделал это вручную.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

это уродливо, но в классе 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);
    }
}

это, очевидно, все требует, чтобы сеттеры действительно существовали ...

Вы также можете использовать компонент сериализатора , как предложил enricog в их комментарии.Или вы можете использовать компонент доступа к свойству, который сам найдет правильные установщики или сумматоры.

0 голосов
/ 26 сентября 2019

А, вообще-то, я решил, что могу легко добавить это сам, и, вероятно, поэтому Symfony не предоставляет ничего подобного из коробки.Просто добавьте следующий метод в класс сущности:

public function setData($data)
{
    foreach ($data as $key => $value)
    {
        $this->$key = $value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...