2016-04-01 25 views
1

私はPHPとSymfony2を初めて使いましたが、私は自分のやり方を学んでいます。twig /コントローラで 'products'を表示/取得する方法

私のユーザーのカートに関連付けられた商品を「ショーカート」ページに表示することに苦労しています。

これらは私の団体です:

These are my associations

これは私のshowCartAction機能である:何の意味、

<table class="table table-striped"> 
      <thead> 
       <tr> 
        <th>Product</th> 
        <th>Quantity</th> 
        <th>Price Per Unit</th> 
        <th>Remove Product</th> 
       </tr> 
      </thead> 

      <tbody> 
      {% for key, quantities in quantity %} 

        <tr> 
        {# <td>{{ key }}</td> <!--Product--> #} 
         <td>{{ quantity.product }}</td> <!--Product--> 
         <td> 
          <input class="spinner" value="0" style="width:30px"> 
         </td> <!--Quantity--> 
        {# <td>${{ product.price }}</td> <!--Price Per Unit--> #} 
         <td> 
          <a href="{{ path('product_remove', {'id': key }) }}"> 
           <button name="REMOVE" type="button" class="btn btn-danger" id="removeButton"> 
            <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> 
           </button> 
          </a> 
         </td><!--Remove--> 
        </tr> 
       {% endfor %}  
      </tbody> 
     </table> <!--top table--> 

何も示しています

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

// --------------------------- show only what the user added to their cart --------------------------- // 
// show products associated with userCartID 

    $em = $this->getDoctrine()->getManager(); 
    // $id = $this->getId(); 
    $user = $this->getUser(); 

    $cart = $em->getRepository('ShopBundle:UserCart')->findOneBy(['user' => $this->getUser()], $submitted=NULL); 

    if (!$cart) { 
     throw $this->createNotFoundException(
      'ERROR: No product found for id ' 
     ); 
    } 

    $totalCostOfAllProducts = 0; 

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

    return array(
     // 'user' => $user, 
     // 'products' => $cart->getProduct(), // for :Quantity 
     // 'products' => $cart->getUserCart(), // for :Quantity 
     'user' => $cart->getUser(),   // for :UserCart 
     'quantity' => $cart->getQuantities(),   // for :UserCart 
     // 'product' => $->getProduct(),   // for :UserCart 
     'totalCostOfAllProducts' => $totalCostOfAllProducts, 
    ); 
} 

これは小枝ファイルですページの「商品」。

screenshot of page

EDIT:数量のVARダンプ:あなたの変数名を混同されている1つの場合

ProductController.php on line 428: 
PersistentCollection {#1179 ▼ 
    -snapshot: [] 
    -owner: UserCart {#1161 ▼ 
    -id: 3 
    -timestamp: null 
    -submitted: null 
    -user: User {#1053 ▶} 
    -quantities: PersistentCollection {#1179} 
    } 
    -association: array:15 [ …15] 
    -em: EntityManager {#68 …10} 
    -backRefFieldName: "userCart" 
    -typeClass: ClassMetadata {#1162 …} 
    -isDirty: false 
    -initialized: false 
    -coll: ArrayCollection {#1180 ▶} 
} 
+0

あなたのコントローラに 'var_dump($ cart-> getQuantities()')を実行することで、あなたのビューに送られたデータをデバッグしようとしましたか? – alexf

+0

はい、私はそれを上記の編集に含めますあなたはそれが間違っていることを解読するのを助けることができますか? – user6145149

+0

オブジェクト "Doctrine \ ORM \ PersistentCollection"のメソッド "user"が存在しません...しかし、コレクションと配列は基本的に同じものではありませんコレクションにアクセスするにはループを使用する必要がありますか? – user6145149

答えて

0

# showCartAction 
return array(
     ... 
     'quantity' => $cart->getQuantities() 
     ...  
); 

# showcart.html.twig 
{% for key, quantities in quantity %} 
    ... 
    <td>{{ quantity.product }}</td> 
    ... 
{% endfor %} 

テンプレートでは、「数量」はカート内の数量の集まりであり、「数量」はforループ内のこれらの項目の1つです。 は、このように「数量」は商品の属性を持っていませんが、「量は」(おそらく外部キーとして、数量のためにあなたのエンティティに応じて)それを持っている必要があります。 #showcart.html.twig {{quantities.product}}

または、あなたのコードをより読みやすくするために、あなたのアクション 'quantity'によって返された配列にラベルを付けるほうが良いでしょう。

# showCartAction 
$quantities = $cart->getQuantities(); 
return array(
    'quantities' => $quantities; 
) 

# showcart.html.twig 
{% for key, quantity in quantities %} 
    ... 
    <td>{{ quantity.product }}</td> 
    ... 
{% endfor %} 

また、数量コレクションも空であるようです。テンプレート内のコレクションのサイズを確認し :

# showcart.html.twig 
{{ dump(quantities|length) }} 

をどちらかが何かオフは、あなたのORMの設定であるか、あなたのプロジェクトに任意の備品をロードdidntの。

マイナーアドバイス: コントローラの動作を細くしてください。 例外処理と共にモデルからカートを取り出すことをアウトソーシングします(そこに 'if..catch'ではなく 'try..catch'を使用します)。 開発には、app_dev.phpを使用してください。より厳密で、空白のテーブルを表示するのではなく詳細なエラーメッセージを表示します。

関連する問題