2017-04-25 95 views
-2

打印有关产品的信息在我的车在我的数据库“shoppinp-购物车系统”我有4个表: “”,“cart_product”,“用户”和“产品”我想获得当前的用户手推车并打印产品,但不仅仅是产品名称,而是完整的特征,例如名称,价格,图像和数量。如何使用Symfony的

这里是我的功能listCartAction()在我的CartController:

/** 
* @Route("/cart/show/{id}", name="cart_list") 
*/ 
public function listCartAction($id) 
{ 
    $cart = $this->getDoctrine()->getRepository('AppBundle:CartProduct')->find($id); 

    $cartProducts = $cart->getProduct(); 

    return $this->render('cart/cart.view.html.twig', array(
     'cart' => $cartProducts 
    )); 
} 

而且枝条模板:

`{% extends 'base.html.twig' %} 

    {% block body %} 
     <div style="text-align: center;"> 
      <h1>Products In My Cart</h1> 
     </div> 
     {% for c in cart %} 
      <h1>{{ c.product }}</h1> 
     {% endfor %} 
    {% endblock %}` 

车实体:`

<? 

php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Cart 
* 
* @ORM\Table(name="cart") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\CartRepository") 
*/ 
class Cart 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    private $userId; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="date_created", type="datetime") 
    */ 
    private $dateCreated; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="date_updated", type="datetime") 
    */ 
    private $dateUpdated; 


    /** 
    * Get id 
    * 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set userId 
    * 
    * @param integer $userId 
    * 
    * @return Cart 
    */ 
    public function setUserId($userId) 
    { 
     $this->userId = $userId; 

     return $this; 
    } 

    /** 
    * Get userId 
    * 
    * @return int 
    */ 
    public function getUserId() 
    { 
     return $this->userId; 
    } 

    /** 
    * Set dateCreated 
    * 
    * @param \DateTime $dateCreated 
    * 
    * @return Cart 
    */ 
    public function setDateCreated($dateCreated) 
    { 
     $this->dateCreated = $dateCreated; 

     return $this; 
    } 

    /** 
    * Get dateCreated 
    * 
    * @return \DateTime 
    */ 
    public function getDateCreated() 
    { 
     return $this->dateCreated; 
    } 

    /** 
    * Set dateUpdated 
    * 
    * @param \DateTime $dateUpdated 
    * 
    * @return Cart 
    */ 
    public function setDateUpdated($dateUpdated) 
    { 
     $this->dateUpdated = $dateUpdated; 

     return $this; 
    } 

    /** 
    * Get dateUpdated 
    * 
    * @return \DateTime 
    */ 
    public function getDateUpdated() 
    { 
     return $this->dateUpdated; 
    } 
} 

` 车产品实体:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* CartProduct 
* 
* @ORM\Table(name="cart_product") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\CartProductRepository") 
*/ 
class CartProduct 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var Cart 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Cart") 
    * @ORM\JoinColumn(name="cart_id", referencedColumnName="id") 
    */ 
    private $cart; 

    /** 
    * @var \stdClass 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Product") 
    * @ORM\JoinColumn(name="product_id", referencedColumnName="id") 
    */ 
    private $product; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="quantity", type="integer") 
    */ 
    private $quantity; 


    /** 
    * Get id 
    * 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set cart 
    * 
    * @param \stdClass $cart 
    * 
    * @return CartProduct 
    */ 
    public function setCart($cart) 
    { 
     $this->cart = $cart; 

     return $this; 
    } 

    /** 
    * Get cart 
    * 
    * @return Cart 
    */ 
    public function getCart() 
    { 
     return $this->cart; 
    } 

    /** 
    * Set product 
    * 
    * @var Product 
    * 
    * @return CartProduct 
    */ 
    public function setProduct($product) 
    { 
     $this->product = $product; 

     return $this; 
    } 

    /** 
    * Get product 
    * @var Product 
    */ 
    public function getProduct() 
    { 
     return $this->product; 
    } 

    /** 
    * Set quantity 
    * 
    * @param integer $quantity 
    * 
    * @return CartProduct 
    */ 
    public function setQuantity($quantity) 
    { 
     $this->quantity = $quantity; 

     return $this; 
    } 

    /** 
    * Get quantity 
    * 
    * @return int 
    */ 
    public function getQuantity() 
    { 
     return $this->quantity; 
    } 
} 

回答

2

考虑到您的实体和映射是正确的,您需要返回Cart实体而不是CartProduct。请记住,你可以使用symfony中的参数转换器,这样的事情:

/** 
* @Route("/cart/show/{id}", name="cart_list") 
*/ 
public function listCartAction(Cart $cart) //Remember to import the Cart class! 
{ 
    return $this->render('cart/cart.view.html.twig', array(
     'cart' => $cart 
    )); 
} 

嫩枝:

{% extends 'base.html.twig' %} 

    {% block body %} 
     <div style="text-align: center;"> 
      <h1>Products In My Cart</h1> 
     </div> 
     {% for p in cart.products %} 
      <h1>{{ p.name }}</h1> 
      <p>{{ p.price }}</p> 
      //Render other products properties here... 
     {% endfor %} 
    {% endblock %} 

Symfony的paramconverter文档:http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

编辑 - 你发布你的实体后

/** 
* @Route("/cart/show/{id}", name="cart_list") 
*/ 
public function listCartAction($id) 
{ 
    $cartProducts = $this->getDoctrine()->getRepository('AppBundle:CartProduct') 
     ->findByCart($id); 

    return $this->render('cart/cart.view.html.twig', array(
     'cartProducts' => $cartProducts 
    )); 
} 

树枝:

{% extends 'base.html.twig' %} 

    {% block body %} 
     <div style="text-align: center;"> 
      <h1>Products In My Cart</h1> 
     </div> 
     {% for cp in cartProducts %} 
      <h1>{{ cp.product.name }}</h1> 
      <p>{{ cp.product.price }}</p> 
      <p>{{ cp.quantity }}</p> 
      //Render other products properties here... 
     {% endfor %} 
    {% endblock %} 
+0

我在我的CartProduct中有getProducts()函数,所以改为购物车$购物车我使用CartProduct $ cart。无论如何,当我尝试在树枝中使用p.name时,它会引发此问题: 未找到AppBundle \ Entity \ CartProduct对象。 –

+0

所以你的实体和映射可能是错误的。你应该在'Cart'实体中有'getProducts()',而不是在'CartProduct'中。 –

+0

我编辑我的问题,现在你可以看到我的2个实体,我认为他们没有错 –