如何在Twig循环中迭代许多属性



我在(可能(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.bartwig将测试bar是否是foo的公共属性,如果没有,则测试是否有公共gettergetBar来获取bar


两个循环中的一些旁注,值categorywordtranslation将只保存flashcards的最后一个值,因为每次都会覆盖该值。

最新更新