如何在 Symfony 中使用 foreach 循环从对象中获取数据?
How can I get data from object with foreach loop in 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) "1@12.sw"
["isActive":"App\Entity\Members":private]=>
bool(true)
}
我尝试从 $item 获取字段。
作为我想要的输出
id
username
password
email
isActive
创建字段。
我的做法是:
foreach($item as $field){
echo $field;
}
但是我没有得到任何输出
你不能像那样遍历对象的属性。如果您想在循环中执行此操作,则必须提供一个属性数组。
foreach(['id', 'username', 'email'] as $field){
echo $item->{$field}
}
如果你只想打印一个 属性 你会这样做:
$item->username
您可以使用 get_object_vars, and from each of these you can get to the value of each property using the magic method __get(). See this answer 获取对象属性列表。编辑:实际上你甚至不需要魔术方法...... get_object_vars
returns 值已经存在了。
根据以上链接修改的示例:
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;
}
这是未经测试的代码,但应该可以。
$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;
}
但是我没有得到任何输出
你不能像那样遍历对象的属性。如果您想在循环中执行此操作,则必须提供一个属性数组。
foreach(['id', 'username', 'email'] as $field){
echo $item->{$field}
}
如果你只想打印一个 属性 你会这样做:
$item->username
您可以使用 get_object_vars, and from each of these you can get to the value of each property using the magic method __get(). See this answer 获取对象属性列表。编辑:实际上你甚至不需要魔术方法...... get_object_vars
returns 值已经存在了。
根据以上链接修改的示例:
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;
}
这是未经测试的代码,但应该可以。