我在(可能(Twig中的属性有问题。我在Symfony中有一个控制器,其中getCategories((、getWords((etTranslations(([/strong>方法(来自Doctrine(返回对象(关系(。控制器中的每个属性都是一个数组,因为我调用了返回数组的findAll((方法(再次来自Doctrine(。最后,我将所有属性从控制器返回到视图(Twig文件(,在那里我尝试通过Twig for循环显示结果。
问题是Twig循环只在flashcards属性上迭代(我知道为什么;((,我不知道如何使许多属性迭代。我希望循环对控制器返回的所有属性进行迭代。
在控制器foreach循环中,我尝试用新的关联键更新闪存卡数组,如:类别、单词和翻译,以便Doctrine返回的所有结果(包括关系(都存储在一个闪存盘属性中,但随后Symfony抛出异常。
我想知道是否在控制器中创建一个数组,将抽认卡、分类,单词和翻译数组推送到其中,然后将这个数组返回到视图,但我认为这不是一个好的做法。
这是控制器方法代码:
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循环迭代许多属性(闪卡、单词,类别和翻译(。如果有更好的解决方案,请写下来。
提前感谢您的每一个回答!
根据您的片段,我猜您想要以下内容:
{% 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 %}
查看文档的这一部分。基本上,如果您有foo.bar
,twig
将测试bar
是否是foo
的公共属性,如果没有,则测试是否有公共getter
,getBar
来获取bar
。
两个循环中的一些旁注,值category
、word
和translation
将只保存flashcards
的最后一个值,因为每次都会覆盖该值。