如何迭代 Twig 循环中的许多属性?
How to iterate over many properties in Twig loop?
我对(可能)Twig 中的属性有疑问。我在 Symfony 中有控制器,其中 getCategories()、getWords()、getTranslations() 方法(来自主义)return 对象(关系)。控制器中的每个 属性 都是一个数组,因为我调用了 findAll() 方法(再次来自 Doctrine),其中 return 是数组。最后,我 return 从控制器到视图(Twig 文件)的所有属性,我尝试通过 Twig for 循环显示结果。
问题是 Twig 循环只遍历 flashcards属性(我知道为什么 ;))而且我不知道如何使许多属性迭代。我希望循环遍历控制器 returned 的所有属性。
在控制器 foreach 循环中,我尝试使用新的关联键更新 flashcards 数组,例如:category、 word 和 translation 这样所有由 Doctrine 编辑的结果(包括关系)return 都存储在一个 flashcards 中属性 但随后 Symfony 抛出异常。
我想知道是否在控制器中创建一个数组,我将向其推送 flashcards、cateogry、word 和 translation 数组然后 return 这个数组到视图,但我认为这不是好的做法。
控制器方法代码如下:
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 说:
在呈现模板 ("Catchable Fatal Error: Object of class Proxies__CG__\App\Entity\Words could not be converted to string") 期间抛出异常。
你能给我一些解决这个问题的提示吗?我希望 Twig 循环遍历许多属性(flashcard、word、category、翻译)。或者如果有更好的解决办法请写下。
预先感谢您的每一个回答!
根据您的代码片段,我猜您想要如下内容:
{% 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
的 public 属性,如果不是,则测试是否有 public getter
, getBar
, 获取 bar
.
两个循环中的一些旁注,值 category
、word
和 translation
将仅保留 flashcards
的最后一个值,因为您正在覆盖每次的价值。
我对(可能)Twig 中的属性有疑问。我在 Symfony 中有控制器,其中 getCategories()、getWords()、getTranslations() 方法(来自主义)return 对象(关系)。控制器中的每个 属性 都是一个数组,因为我调用了 findAll() 方法(再次来自 Doctrine),其中 return 是数组。最后,我 return 从控制器到视图(Twig 文件)的所有属性,我尝试通过 Twig for 循环显示结果。
问题是 Twig 循环只遍历 flashcards属性(我知道为什么 ;))而且我不知道如何使许多属性迭代。我希望循环遍历控制器 returned 的所有属性。
在控制器 foreach 循环中,我尝试使用新的关联键更新 flashcards 数组,例如:category、 word 和 translation 这样所有由 Doctrine 编辑的结果(包括关系)return 都存储在一个 flashcards 中属性 但随后 Symfony 抛出异常。
我想知道是否在控制器中创建一个数组,我将向其推送 flashcards、cateogry、word 和 translation 数组然后 return 这个数组到视图,但我认为这不是好的做法。
控制器方法代码如下:
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 说:
在呈现模板 ("Catchable Fatal Error: Object of class Proxies__CG__\App\Entity\Words could not be converted to string") 期间抛出异常。
你能给我一些解决这个问题的提示吗?我希望 Twig 循环遍历许多属性(flashcard、word、category、翻译)。或者如果有更好的解决办法请写下。
预先感谢您的每一个回答!
根据您的代码片段,我猜您想要如下内容:
{% 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
的 public 属性,如果不是,则测试是否有 public getter
, getBar
, 获取 bar
.
两个循环中的一些旁注,值 category
、word
和 translation
将仅保留 flashcards
的最后一个值,因为您正在覆盖每次的价值。