У меня ошибка: «Невозможно использовать объект типа 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
Этот пример Вот все объясняет
$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()
или что там у вас есть.
Обычно, когда вы получаете такую ошибку, вы должны проверить тип данных. Если переменная является массивом, вы можете получить к ней доступ только как к массиву, используя $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();
Кажется, вы не видите различий между объектами и массивами. Допустим, у вас есть объект (класс) Car
и этот объект имеет свойство, например, type
установить на «Ван». Теперь вы хотите получить этот тип. Как ты это делаешь? С помощью ->
условное обозначение.
$car = new Car();
echo $car->type; //Van
Теперь у нас есть массив $car
с именованным индексом type
установлен в Muscle
,
$car = ['type' => 'Muscle'];
echo $car['type']; //Muscle
Вы не можете рассматривать объект как массив и наоборот. У вас есть Entity (который является просто классом, объектом), поэтому вы должны обращаться с ним как с объектом.
Так что если у вас есть сущность User
вы получаете доступ к его свойствам, используя ->
не []
,