$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 Проблема в том, что мне нужно получить только каждое поле, которое есть в объекте, с геттерами, которые я знаю, чтобы получить конкретное поле, если вы уже знаете имя поля, но что, если вы не знаете, что находится внутри объект и хотите получить своего рода список всех полей внутри
Попался. Я бы написал правильный ответ, но я сейчас с телефона. Проверить php.net/manual/en/function.get-object-vars.php Есть ответ. В основном вы можете использовать массив или использовать функцию get object vars (изнутри класса, чтобы получить частные переменные)



Вы не можете зацикливаться на свойствах такого объекта. Если вы хотите сделать это в цикле, вам нужно будет предоставить массив свойств.
foreach(['id', 'username', 'email'] as $field){
echo $item->{$field}
}
Если бы вы просто хотели напечатать одно свойство, вы бы сделали это так:
$item->username
Мое плохое, поскольку свойства являются частными, они не будут доступны для get_object_vars. Я обновлю свой ответ.
Я не могу сделать это так, потому что эта информация 'id', 'username', 'email' на самом деле то, что мне нужно в качестве вывода.
Вы можете получить список свойств объекта с помощью 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 в код класса, буквально прямо из документы. Я обновлю свой ответ, чтобы показать.
Обычно это делается с помощью геттеров