(Symfony3/php7) 不能将 AppBundle\Entity 类型的对象用作数组
(Symfony3/php7) Cannot use object of type AppBundle\Entity as array
我有一个错误:“不能将 AppBundle\Entity 类型的对象用作数组”,这对我来说没有意义,我觉得没关系。
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
$repository = $this->getDoctrine()->getRepository(User::class);
$findUser = $repository->findOneBy(['username' => $form->getData()['username']]);
if ($findUser) {
return $this->redirectToRoute('login');
}
错误 无法使用 AppBundle\Entity\User 类型的对象,因为数组 与“$findUser =”一致=13=]
有人可以解释我为什么不起作用吗?
Symfony 3.3,PHP7
通常当您遇到这样的错误时,您必须检查数据类型。如果变量是数组,您只能使用 $variable['index'];
作为数组访问它,如果它是对象,您可以使用 $variable->index;
访问它。找出变量类型的最佳方法是使用 print_r($variable);
或 var_dump($variable);
,它会为您输出变量类型。在您的情况下,您将使用 print_r($form->getData());
或 var_dump($form->getData());
。如果您使用错误的方式从变量 (array/object) 获取数据,您将收到(无法使用类型的对象)错误。
如果它是数组(在你的情况下它不是):
$form->getData()['username'];
如果是对象:
$form->getData()->username;
如果您的框架有 getter 和 setter:
$form->getData()->getUsername();
这个例子here解释了一切:
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// $form->getData() holds the submitted values
// but, the original `$task` variable has also been updated
$task = $form->getData();
...
}
因此,$form->getData()
拥有该实体。因此,如果您的 User
实体具有 username
属性,您应该将其命名为 $form->getData()->getUsername()
或您那里的任何 getter。
您似乎没有看出对象和数组之间的区别。假设您有一个对象 (class) Car
并且该对象有一个 属性 例如type
设置为 'Van'。现在你想得到这个类型。你是怎么做到的?使用 ->
符号。
$car = new Car();
echo $car->type; //Van
现在我们有一个数组 $car
,命名索引 type
设置为 Muscle
。
$car = ['type' => 'Muscle'];
echo $car['type']; //Muscle
您不能将对象视为数组,反之亦然。你有 Entity(它只是一个 class,对象)所以你必须像对待对象一样对待它。
因此,如果您有实体 User
,您可以使用 ->
而不是 []
.
来访问其属性
我有一个错误:“不能将 AppBundle\Entity 类型的对象用作数组”,这对我来说没有意义,我觉得没关系。
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
$repository = $this->getDoctrine()->getRepository(User::class);
$findUser = $repository->findOneBy(['username' => $form->getData()['username']]);
if ($findUser) {
return $this->redirectToRoute('login');
}
错误 无法使用 AppBundle\Entity\User 类型的对象,因为数组 与“$findUser =”一致=13=]
有人可以解释我为什么不起作用吗?
Symfony 3.3,PHP7
通常当您遇到这样的错误时,您必须检查数据类型。如果变量是数组,您只能使用 $variable['index'];
作为数组访问它,如果它是对象,您可以使用 $variable->index;
访问它。找出变量类型的最佳方法是使用 print_r($variable);
或 var_dump($variable);
,它会为您输出变量类型。在您的情况下,您将使用 print_r($form->getData());
或 var_dump($form->getData());
。如果您使用错误的方式从变量 (array/object) 获取数据,您将收到(无法使用类型的对象)错误。
如果它是数组(在你的情况下它不是):
$form->getData()['username'];
如果是对象:
$form->getData()->username;
如果您的框架有 getter 和 setter:
$form->getData()->getUsername();
这个例子here解释了一切:
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// $form->getData() holds the submitted values
// but, the original `$task` variable has also been updated
$task = $form->getData();
...
}
因此,$form->getData()
拥有该实体。因此,如果您的 User
实体具有 username
属性,您应该将其命名为 $form->getData()->getUsername()
或您那里的任何 getter。
您似乎没有看出对象和数组之间的区别。假设您有一个对象 (class) Car
并且该对象有一个 属性 例如type
设置为 'Van'。现在你想得到这个类型。你是怎么做到的?使用 ->
符号。
$car = new Car();
echo $car->type; //Van
现在我们有一个数组 $car
,命名索引 type
设置为 Muscle
。
$car = ['type' => 'Muscle'];
echo $car['type']; //Muscle
您不能将对象视为数组,反之亦然。你有 Entity(它只是一个 class,对象)所以你必须像对待对象一样对待它。
因此,如果您有实体 User
,您可以使用 ->
而不是 []
.