我(可能)在Twig中的属性存在问题。我在Symfony中有控制器,其中(来自Doctrine的) getCategories(), getWords(), getTranslations()方法返回对象(关系)。控制器中的每个属性都是一个数组,因为我调用了返回数组的 findAll()方法(再次从Doctrine中调用)。最后,我将控制器的所有属性返回到视图(Twig文件),在这里尝试显示Twig for loop的结果。
问题是Twig循环仅对 flashcards 属性进行迭代(我知道为什么;)),而我不知道如何进行多属性迭代。我希望循环遍历控制器返回的所有属性。
在controller foreach循环中,我尝试使用新的关联键更新 flashcards 数组,例如: category , word 和 translation ,以便将Doctrine返回的所有结果(包括关系)存储在一个 flashcards 属性中,但是Symfony会引发异常。
我想知道是否在控制器中创建一个数组,以便将抽认卡,类别, word 和 translation < / em>数组,然后将此一个数组返回到视图,但是我认为这不是好习惯。
这是控制器方法代码:
public function showAllCards()
{
$flashcards = $this->getDoctrine()->getRepository(Flashcards::class)
->findAll();
foreach ($flashcards as $flashcard) {
$category = $flashcard->getCategories()->getName();
$word = $flashcard->getWords()->getWord();
$translation = $flashcard->getTranslations()->getWord();
}
return $this->render('try_me/index.html.twig', [
'flashcards' => $flashcards,
'category' => $category,
'word' => $word,
'translation' => $translation
]);
}
这是Twig循环代码:
{% for flashcard in flashcards %}
{{ word }}
<br>
{{ flashcard.pronunciation }}
<br>
{{ flashcard.exampleSentence }}
<br>
{{ category }}
<br>
{{ translation }}
<br>
{% endfor %}
我试图执行以下控制器代码...
public function showMeAll()
{
$flashcards = $this->getDoctrine()->getRepository(Flashcards::class)
->findAll();
foreach ($flashcards as $flashcard) {
$flashcards['categories'] = $flashcard->getCategories()->getName();
$flashcards['words'] = $flashcard->getWords()->getWord();
$flashcards['translations'] = $flashcard->getTranslations()->getWord();
}
return $this->render('try_me/index.html.twig', [
'flashcards' => $flashcards,
]);
}
...具有以下Twig循环...
{% for flashcard in flashcards %}
{{ flashcard.words }}
<br>
{{ flashcard.pronunciation }}
<br>
{{ flashcard.exampleSentence }}
<br>
{{ flashcard.categories }}
<br>
{{ flashcard.translations }}
<br>
{% endfor %}
...但是随后Symfony说:
在呈现模板期间引发了异常(“可捕获的致命错误:Proxies__CG __ \ App \ Entity \ Words类的对象无法转换为字符串”)。
能给我一些解决这个问题的技巧吗?我希望Twig循环可迭代许多属性(闪存卡,单词,类别,翻译)。或写下是否有更好的解决方案。
在此先感谢您的回答!
答案 0 :(得分:0)
根据您的代码段,我猜您需要以下内容:
{% for flashcard in flashcards %}
{% for word in flashcard.getWords() %}
{{ word }}<br />
{% endfor %}
{{ flashcard.getPronunciation() }}<br>
{{ flashcard.getExampleSentence() }}<br>
{% for category in flashcard.getCategories()() %}
{{ category.getName() }}<br />
{% endfor %}
{% for translation in flashcard.getTranslations() %}
{{ translation.getWord() }}<br />
{% endfor %}
{% endfor %}
请参阅本文档的section。基本上,如果您拥有foo.bar
,twig
将测试bar
是否是foo
的公共财产,如果没有,则测试是否存在公共getter
,{{ 1}},以获取getBar
。
两个循环中都有一些旁注,值bar
,category
和word
仅保存translation
的最后一个值,因为您正在覆盖该值每次。