(Symfony3 / php7)不能使用AppBundle \ Entity类型的对象作为数组

时间:2017-12-25 22:09:41

标签: php symfony 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

3 个答案:

答案 0 :(得分:4)

此示例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()或您拥有的任何吸气剂。

答案 1 :(得分:1)

通常,当您收到此类错误时,您必须检查数据类型。如果变量是数组,则只能使用$variable['index'];作为数组访问它,如果它是对象,则可以使用$variable->index;访问它。找出变量类型的最佳方法是使用print_r($variable);var_dump($variable);,它将为您输出变量类型。在您的情况下,您将使用print_r($form->getData());var_dump($form->getData());。如果你使用错误的方法从变量(数组/对象)获取数据,你将收到(不能使用类型的对象)错误。

如果是数组(在你的情况下不是):

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

如果是对象:

$form->getData()->username;

如果你的框架有getter和setter:

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

答案 2 :(得分:0)

您似乎没有看到对象和数组之间的差异。我们假设您有一个对象(类)Car,并且该对象具有一个属性,例如type设置为' Van'。现在你想得到这种类型。你是怎么做到的?使用->符号。

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

现在我们有一个数组$car,其名称索引type设置为Muscle

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

您不能将Object视为数组,反之亦然。你有实体(它只是一个类,对象)所以你必须像对象一样对待它。

因此,如果您有实体User,则使用->而非[]访问其属性。