Как я могу получить данные от объекта с циклом foreach в Symfony? - PullRequest
0 голосов
/ 29 августа 2018
$EntityName = 'App\\Entity\\' . ucwords($slug);
$item = new $EntityName();    
$item= $this->getDoctrine()->getRepository($EntityName)->find($id);
    $form = $this->createFormBuilder($item)

содержание $item:

object(App\Entity\Members)#4788 (6) {
  ["id":"App\Entity\Members":private]=>
  int(9)
  ["username":"App\Entity\Members":private]=>
  string(13) "123"
  ["plainPassword":"App\Entity\Members":private]=>
  NULL
  ["password":"App\Entity\Members":private]=>
  string(0) ""
  ["email":"App\Entity\Members":private]=>
  string(7) "1@12.sw"
  ["isActive":"App\Entity\Members":private]=>
  bool(true)
}

Я пытаюсь получить поля из $ item.

В качестве вывода я хочу получить

id
username
password
email
isActive

для создания полей.

Мой подход:

foreach($item as $field){
   echo $field;
}

Но я не получаю вывод

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы можете получить список свойств объекта с помощью get_object_vars , и из каждого из них вы можете получить значение каждого свойства, используя магический метод __get (). См. этот ответ . РЕДАКТИРОВАТЬ: Вам даже не нужен магический метод ... get_object_vars уже возвращает значения.

Пример, модифицированный по вышеуказанным ссылкам:

class Foo {
    private $a;
    private $d;

    public function getAllFields() {
        return get_object_vars($this);
    }
}

Тогда вы можете получить все (нестатические) свойства, включая частные, с помощью этого:

$item = new Foo();
$fields = $item->getAllFields();

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

foreach ($fields as $fieldName => $fieldValue) {
    echo $fieldName . ' has value ' . $fieldValue;
}

Это непроверенный код, но он должен работать.

0 голосов
/ 29 августа 2018

Вы не можете зацикливать свойства такого объекта. Если вы хотите сделать это в цикле, вам нужно будет предоставить массив свойств.

foreach(['id', 'username', 'email'] as $field){
   echo $item->{$field}
}

Если бы вы просто хотели напечатать одно свойство, вы бы сделали это так: $item->username

...