0

私はSymfonyが初めてです

コントローラー クラスに単純なメソッド indexAction があります。

    function indexAction()
    {
        $em = $this->getDoctrine()
            ->getEntityManager();

        $prods = $em->getRepository('EcommerceProductBundle:ProductData')->findBy(array('product'=>2));

        return $this->render('EcommerceProductBundle:Page:index.html.twig', array(
            'prods' => $prods
        )); 
    }

プロファイルに表示されるクエリがあり、エンティティが適切に取得されているという点で、うまく機能しているようです。

Ecommerce\ProductBundle\Entity\ProductData  Valid
Ecommerce\ProductBundle\Entity\ProductData  Valid
Ecommerce\ProductBundle\Entity\Product  Valid
Ecommerce\ProductBundle\Entity\Language     Valid
Ecommerce\ProductBundle\Entity\ProductImage     Valid
Ecommerce\ProductBundle\Entity\FileImage    Valid
Ecommerce\ProductBundle\Entity\Product  Valid
Ecommerce\ProductBundle\Entity\Language     Valid 

この同じ投稿によると、 Symfony 2 - アクセス マップされたオブジェクト プロパティ フォーム twig

以下のようなProductエンティティのオブジェクトを小枝テンプレート (index.html.twig) で呼び出そうとしました。

{% for prod in prods %}
    Price: {{ prod.Product.price }}
{% endfor %}

そしてそれは正しく機能します。以下のようにProductImageエンティティのオブジェクトを呼び出そうとしても、同じことは起こりません

{% for prod in prods %}
    Image title: prod.ProductImage.title
or

    {% for pimg in prod.ProductImage %}
{% endfor %}

次のエラーが表示されます。

Method "ProductImage" for object "Ecommerce\ProductBundle\Entity\ProductData" does not exist in EcommerceProductBundle:Page:index.html.twig at line 36 

ProductImage EntityProduct Entityのように正しくマッピングされていますが、最初のものとは対照的に、最後のものが完全に機能するのはなぜですか?

4

1 に答える 1

0

ProductImage エンティティを指す ProductData 内のオブジェクトの呼び出しを解決しました。

ProductDataエンティティのスニペット

 /**
 * @ORM\OneToMany(targetEntity="ProductImage", mappedBy="product_pi", fetch="EAGER", cascade={"persist"})
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="product_id", referencedColumnName="product_id"),
 *   @ORM\JoinColumn(name="language_id", referencedColumnName="language_id")
 * })
 */
protected $products_pi;

index.html.twigテンプレートのスニペット

{% for pimg in prod.getProductsPi %}
 {{ pimg.title }}
{% endfor %}
于 2013-07-11T13:42:43.847 に答える