Как я могу получить данные из объекта с помощью цикла foreach в Symfony?

$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) "[email protected]"
  ["isActive":"App\Entity\Members":private]=>
  bool(true)
}

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

В качестве результата я хочу иметь

id
username
password
email
isActive

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

Мой подход:

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

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

Обычно это делается с помощью геттеров

revengeance 29.08.2018 19:46

@revengeance Проблема в том, что мне нужно получить только каждое поле, которое есть в объекте, с геттерами, которые я знаю, чтобы получить конкретное поле, если вы уже знаете имя поля, но что, если вы не знаете, что находится внутри объект и хотите получить своего рода список всех полей внутри

peace_love 29.08.2018 19:49

Попался. Я бы написал правильный ответ, но я сейчас с телефона. Проверить php.net/manual/en/function.get-object-vars.php Есть ответ. В основном вы можете использовать массив или использовать функцию get object vars (изнутри класса, чтобы получить частные переменные)

revengeance 29.08.2018 20:14
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
3
2 088
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

Мое плохое, поскольку свойства являются частными, они не будут доступны для get_object_vars. Я обновлю свой ответ.

Chip Dean 29.08.2018 19:37

Я не могу сделать это так, потому что эта информация 'id', 'username', 'email' на самом деле то, что мне нужно в качестве вывода.

peace_love 30.08.2018 09:39

Вы можете получить список свойств объекта с помощью 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;
}

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

Конечно, может, просто поместите get_object_vars в код класса, буквально прямо из документы. Я обновлю свой ответ, чтобы показать.

ehymel 30.08.2018 15:20

Другие вопросы по теме