(Symfony3 / php7) Невозможно использовать объект типа AppBundle \ Entity в качестве массива

У меня ошибка: «Невозможно использовать объект типа 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 =«

Может кто-нибудь объяснить, почему это не работает?

Symfony 3.3, PHP 7

-1

Решение

Этот пример Вот все объясняет

$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() или что там у вас есть.

4

Другие решения

Обычно, когда вы получаете такую ​​ошибку, вы должны проверить тип данных. Если переменная является массивом, вы можете получить к ней доступ только как к массиву, используя $variable['index'];, если это объект, вы можете получить к нему доступ, используя $variable->index;, Лучший способ выяснить тип переменной — использовать print_r($variable); или же var_dump($variable); и он выведет тип переменной для вас. В вашем случае вы будете использовать print_r($form->getData()); или же var_dump($form->getData());, Если вы используете неправильный способ получения данных из переменной (массив / объект), вы получите ошибку (Невозможно использовать объект типа).

Если это массив (в вашем случае это не так):

$form->getData()['username'];

Если это объект:

$form->getData()->username;

если ваша структура имеет геттеры и сеттеры:

$form->getData()->getUsername();
1

Кажется, вы не видите различий между объектами и массивами. Допустим, у вас есть объект (класс) Car и этот объект имеет свойство, например, type установить на «Ван». Теперь вы хотите получить этот тип. Как ты это делаешь? С помощью -> условное обозначение.

$car = new Car();
echo $car->type; //Van

Теперь у нас есть массив $car с именованным индексом type установлен в Muscle,

$car = ['type' => 'Muscle'];
echo $car['type']; //Muscle

Вы не можете рассматривать объект как массив и наоборот. У вас есть Entity (который является просто классом, объектом), поэтому вы должны обращаться с ним как с объектом.

Так что если у вас есть сущность User вы получаете доступ к его свойствам, используя -> не [],

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector