代码之家  ›  专栏  ›  技术社区  ›  shaelex

(Symfony3/php7)无法将AppBundle\Entity类型的对象用作数组

  •  1
  • shaelex  · 技术社区  · 8 年前

    我有一个错误:“ 无法将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 回复  |  直到 8 年前
        1
  •  5
  •   Kevin Kopf    8 年前

    此示例 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() 或者你有什么好东西。

        2
  •  3
  •   Asmir Zahirovic    8 年前

    通常,当您遇到这样的错误时,您必须检查数据类型。如果变量是array,则只能使用 $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();
    
        3
  •  1
  •   Wolen    8 年前

    您似乎看不到对象和数组之间的差异。假设您有一个对象(类) Car 该对象具有一个属性,例如。 type 设置为“Van”。现在您要获取此类型。你是怎么做到的?使用 -> 象征

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

    现在我们有了一个数组 $car 具有命名索引 类型 设置为 Muscle .

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

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

    所以如果你有实体 User 您可以使用访问其属性 -&燃气轮机; [] .