【问题标题】:Cannot use object of type as array不能将类型的对象用作数组
【发布时间】:2016-01-24 17:30:39
【问题描述】:

我正在尝试在我的页面验证中呈现我的订单,但是在刷新我的 validation.html.twig 时出现此错误:

错误:不能使用 FLY\BookingsBundle\Entity\Address 类型的对象作为 数组

if (!isset($order['tva']['%'.$entity->getTva()->getValue()]))

但我没有看到我的控制器有任何问题:

账单

public function bill()
{
    $em = $this->getDoctrine()->getManager();
    $generator = $this->container->get('security.secure_random');
    $session = $this->getRequest()->getSession();
    $address = $session->get('address');
    $cart = $session->get('cart');
    $order = array();
    $totalHT = 0;
    $totalTTC = 0;

    $order = $em->getRepository('FLYBookingsBundle:Address')->find($address['address']);
    $entities = $em->getRepository('FLYBookingsBundle:Post')->findArray(array_keys($session->get('cart')));

    foreach($entities as $entity)
    {
        $priceHT = ($entity->getPrice() * $cart[$entity->getId()]);
        $priceTTC = ($entity->getPrice() * $cart[$entity->getId()] / $entity->getTva()->getMultiplicate());
        $totalHT += $priceHT;
        $totalTTC += $priceTTC;

        if (!isset($order['tva']['%'.$entity->getTva()->getValue()]))
            $order['tva']['%'.$entity->getTva()->getValue()] = round($priceTTC - $priceHT,2);
        else
            $order['tva']['%'.$entity->getTva()->getValue()] += round($priceTTC - $priceHT,2);

        $order['entity'][$order->getId()] = array('reference' => $order->getName(),
                                                 'quantity' => $cart[$entity->getId()],
                                                 'priceHT' => round($entity->getPrice(),2),
                                                 'priceTTC' => round($entity->getPrice() / $entity->getTva()->getMultiplicate(),2));
    }

    $order['address'] = array('surname' => $address->getSurname(),
        'name' => $address->getName(),
        'phone' => $address->getPhone(),
        'address' => $address->getAddress(),
        'zipcode' => $address->getZipcode(),
        'city' => $address->getCity(),
        'country' => $address->getCountry(),
        'complement' => $address->getComplement());

    $order['priceHT'] = round($totalHT,2);
    $order['priceTTC'] = round($totalTTC,2);
    $order['token'] = bin2hex($generator->nextBytes(20));

    return $order;
}

验证操作

public function validationAction()
{
    if ($this->get('request')->getMethod() == 'POST')
        $this->setAddressOnSession();
    $em = $this->getDoctrine()->getManager();
    $prepareOrder = $this->forward('FLYBookingsBundle:Post:prepareOrder');
    $order = $em->getRepository('FLYBookingsBundle:Address')->find($prepareOrder->getContent() );
    return $this->render('FLYBookingsBundle:Post:validation.html.twig', array('order' => $order));
}

【问题讨论】:

  • 我认为$order 是一个对象。对象的属性不能像数组一样被访问,例如$order['tva']。除非对象实现ArrayAccess

标签: php mysql symfony twig


【解决方案1】:

您通过$order = $em->getRepository('FLYBookingsBundle:Address')->find($address['address']); 将地址对象分配给$order 变量,然后您想在$order['tva']..... 此处将其用作数组,并在您的代码中进一步向下使用。您必须通过 $order 的方法/属性(如 $order->getTVA())来使用它。

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 2011-10-12
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多