如何在整个控制器中获取数组?

时间:2016-03-25 01:01:49

标签: php arrays symfony

我正在尝试创建一个简单的购物车,并且具有addToCart功能,而这意味着要做的事情。

   /** 
     * Creates the option to 'add product to cart'.
     *
     * @Route("/{id}/addToCart", name="product_addToCart")
     * @Method("GET")
     * @Template()
     */
    public function addToCartAction(Request $request, $id) {

        $em = $this->getDoctrine()->getManager();

        $product = $em->getRepository('ShopTestBundle:Product')->find($id);

        $cartArray = $this->setEmptyCartArray();

        if ($this->checkUserLogin()) {

            $this->addFlash('notice', 'Login to create a cart');

        } else {

            // $cartArray[] = [$product->getId(), $product->getName(), $product->getPrice()];
            $cartArray[$product->getId()] = [$product->getName(), $product->getPrice()];      
                                            //think of a way to do this without using product
            // $cartArray = $this->setCartArray($product);  //SAME RESULT----------------------------
            // $this->setCartArray($cartArray);
            // var_dump($cartArray); die;
            // $cartArray = $this->putInGetCartArray();     //SAME RESULT--------------------------------
            $this->putInGetCartArray($cartArray);
            // var_dump($cartArray); die;
            $this->addFlash('notice', 'The product: '.$product->getName().' has been added to the cart!');

        }

    return $this->redirectToRoute('product');

    }

我需要将该数组转到我的showCart功能,我会向用户显示他们放在购物车中的内容。

/**
 * Shows Empty Cart
 *
 * @Route("/showCart", name="product_showCart")
 * @METHOD("GET")
 * @Template()
 */
public function showCartAction(Request $request) {

    $em = $this->getDoctrine()->getManager();

    // $id = ;

    $product = $em->getRepository('ShopTestBundle:Product')->find($id);

    $user = $this->getUser();

    $totalCostOfAllProducts = 0;

    // $cartArray = $this->setEmptyCartArray();
    // $cartArray = 
    // $cartArray[] = [];
    $this->setCartArray($product);
    $this->putInGetCartArray($cartArray); 

    // $totalCostOfAllProducts = $this->getTotalCost($em, $cartArray, $totalCostOfAllProducts);

    if (empty($price) && empty($quantity) && empty($totalCostOfAllProducts) && empty($cartArray)) {
        $price = 0; $quantity = 0; $totalCostOfAllProducts = 0; $cartArray = [];
    }

    return array(
        'user'  => $user,
        // 'qaunt' => $quant,
        'cartArray' => $cartArray,
        'totalCostOfAllProducts'    => $totalCostOfAllProducts,
    );
}

(顺便说一下,我知道这会产生一个错误,因为它现在就是...... $ id未定义......)

我在控制器中创建了几个不同的辅助方法,但我似乎无法使所有内容正常工作。我在$id中获得了addToCart,但在showCart我没有,这使事情复杂化,因为我无法再次设置数组,因为我需要$id,来自我的实体的$name$price

/*---------------------------------------------------------------------------------------------------*/
    private function setEmptyCartArray() {
        $cartArray = array();
        return $cartArray;
    }
/*---------------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------*/
    // private function setCartArray($em, $id) {

    //     // $cartArray = array();
    //     // var_dump($cartArray); die;
    //     // foreach ($cartArray as $key => $value) {
    //         $product = $em->getRepository('ShopTestBundle:Product')->find($id);
    //         // $id = $productID->getId();
    //         // var_dump($id); die;
    //         $cartArray[$product->getId()] = [$product->getName(), $product->getPrice()];
    //         // $cartArray[] = [$productID->getName(), $productID->getPrice()];
    //     // }

    //     return $this;

    // }
/*---------------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------*/
    private function setCartArray($product) {


        // $this->cartArray = $cartArray;
            $cartArray[$product->getId()] = [$product->getName(), $product->getPrice()];
            // $cartArray[] = [$productID->getName(), $productID->getPrice()];
        // }

        // return $this;
        return $cartArray;

    }
/*---------------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------------------------*/
    private function putInGetCartArray($cartArray) {

        // $cartArray = $this->setCartArray ($product);
        // $cartArray = $this->setCartArray($cartArray);
        $userCartArray = $cartArray;

        // return $this->cartArray;
        return $userCartArray;

    }
/*---------------------------------------------------------------------------------------------------*/

如果您有任何问题或需要更清晰,我很乐意提供。

1 个答案:

答案 0 :(得分:0)

我不认为您可以在不更改大量代码的情况下拥有正常运行的购物车,因为它看起来并不像您实际存储任何数据,我的意思是你应该使用会话或数据库或其他任何东西跟踪你购物车的内容,这似乎不是这里的情况。

无论如何,让我们假设您只想显示购物车的内容一次,并让它在下一个请求时重置,您可以将数组作为参数传递给{{1}函数,像这样:

showCartAction

或者您也可以将数组存储为控制器的属性之一,如下所示:

public function addToCartAction(Request $request, $id) {
    // ...
    else {

        $cartArray[$product->getId()] = [$product->getName(), $product->getPrice()];      
        $this->addFlash('notice', 'The product: '.$product->getName().' has been added to the cart!');
        $this->showCartAction($request, $cartArray);
    }
    // ...
}
// ...
public function showCartAction(Request $request, $cart = array()) {
    // ...
}

希望这有点帮助。