タイトルは少し曖昧ですが、私が達成しようとしていることを説明しましょう。小枝の値をループして空の値を置き換えます
Symfony2 CRMの教義クエリから取得したデータに基づいてCSVを生成しようとしています。取得されるデータは、OpenCart製品および属性データ、およびこの問題とは関係のない個別の情報に基づいています。
各製品には、A、B、D、L1、L2という5つの異なる属性値を設定できます。しかし、一部の製品では、A、B、L1のみがすべて含まれているわけではありません。 CSVでは、各属性値を別々のセルに入れる必要があるため、ヘッダーは次のようになります。
属性| ATTRIBUTE:B | ATTRIBUTE:D | ATTRIBUTE:L1 | ATTRIBUTE:L2
そして、私の小枝ファイルに貫通し、私ループは次のように:製品はすべて5つの属性を持っている場合
{% for attribute in row.product.attributes %}
{% if attribute.text is not null %}
{{ attribute.text }},
{% else %}na,{% endif %}
{% endfor %}
は、CSVの構造が細かいです。しかし、製品に3つの属性しかない場合は、後続のすべての値がセルに引き戻され、他のデータが間違った見出しの下にあることを意味します。私は最初の値をチェックしてみました:
{% for attribute in row.product.attributes %}
{% if attribute.attributeName.name == "A" %}
{% if attribute.text is not null %}
{{ attribute.text }},
{% else %}na,{% endif %}
{% endif %}
{% endfor %}
そして私は、可能な各属性名のためにこれをやったが、名前が存在しない場合、それだけでとにかくそれをスキップするのでunfortuantelyこれは動作しません。私は、これらの属性をループし、存在しない場合はn/aを入力する方法を考えようとするのに問題があります。私は方法があると確信していますが、それは何か分かりません。参考のため
は、ここにCSVのデータを生成するのコントローラーコードです:
public function adminCsvAction($filter) {
$repository = $this->getDoctrine()->getRepository('AppBundle:Project');
$stages_repository = $this->getDoctrine()->getRepository('AppBundle:Stage');
$users_repository = $this->getDoctrine()->getRepository('AppBundle:User');
$results = $repository->getSearchResults($filter);
$users = $users_repository->findAll();
$stages = $stages_repository->findBy(array('deleted' => 0), array('sortOrder' => 'ASC'));
$filename = "export_".date("Y_m_d_His").".csv";
$response = $this->render('AppBundle:pages:csv.html.twig', array('data' => $results,'users' => $users, 'stages' => $stages));
$response->headers->set('Content-Type', 'text/csv');
$response->headers->set('Content-Disposition', 'attachment; filename='.$filename);
return $response;
}
Project
エンティティは、すべての属性を意味OpenCartのProductテーブルにリンクし、リンクされそのうちの一つ、さまざまなマッピングを、持っています値はこれを介してアクセス可能です。
これについての助力は非常に高く評価されます。
twigでのプログラミング(phpと比較して)が苦しいことがあります。個人的には、製品データを入力として受け入れ、5つのスロットすべてに何かを記入したcsv ready配列を返すPHP関数を記述します。 – Cerad
私はCeradに同意し、プレゼンテーションのために 'twig'を使うべきであり、変更はしません – DarkBee
各変数をvar_dumpingしようとしましたか?私も同様の問題があり、var_dumpedを使って、あなたのケースに翻訳して、 'attribute.text'の代わりに' attribute [0] .text'を使用する必要があることを確認してください。 – Florian