有人可以帮助我,当我想显示添加的朋友列表(todo)时,我遇到此错误Variable "user" does not exist
listeami.html.twig
(用户和待办事项之间的关系很多)
{% if not user.todos.empty %}
{% for todo in user.todos %}
{{ todos.age }}{% if not loop.last %}, {% endif %}
{% endfor %}${% endif %}
Controller:todoController.php
(页面显示列表):
/**
* @Route("/todo/listeami", name="todo_listeami")
*/
public function listeamiAction(Request $request)
{
$todos = $this->getDoctrine()
->getRepository('AppBundle:Todo')
->findAll();
return $this->render('todo/listeami.html.twig',array('todos'=>$todos));
}
控制器编辑:
` **/**
* @Route("/todo/editmany/{id}", name="todo_editmany")
*/**
public function editmanyAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
// On récupère l'annonce $id
$user = $em->getRepository('AppBundle:User')->find($id);
if (null === $user) {
throw new NotFoundHttpException("L'user d'id ".$id." n'existe pas.");
}
// La méthode findAll retourne toutes les catégories de la base de données
$listTodos = $em->getRepository('AppBundle:Todo')->findAll();
// On boucle sur les catégories pour les lier à l'annonce
foreach ($listTodos as $todo) {
$user->addCategory($todo);
}
// Pour persister le changement dans la relation, il faut persister l'entité propriétaire
// Ici, Advert est le propriétaire, donc inutile de la persister car on l'a récupérée depuis Doctrine
// Étape 2 : On déclenche l'enregistrement
$em->flush();
// … reste de la méthode
}
`
DATA fixtures的这个页面:
<?php
// src/OC/PlatformBundle/DataFixtures/ORM/LoadCategory.php
namespace AppBundle\DataFixtures\ORM;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use AppBundle\Entity\Todo;
class LoadTodo extends Fixture
{
// Dans l'argument de la méthode load, l'objet $manager est l'EntityManager
public function load(ObjectManager $manager)
{
// Liste des noms de catégorie à ajouter
$ages = array(
'un mois',
'deux jours',
'quatre jours',
'trois heures',
'un jour'
);
foreach ($ages as $age) {
// On crée la catégorie
$todo = new Todo();
$todo->setAge($age);
$todo->setNourriture('Omnivore');
$todo->setRace('Race');
$todo->setFamille('Famille');
$todo->setEmail($age."@gmail.com");
// On la persiste
$manager->persist($todo);
}
// On déclenche l'enregistrement de toutes les catégories
$manager->flush();
}
}
感谢adavance
答案 0 :(得分:0)
您没有从listenamiAction操作传递用户变量,您应该以这种方式修复问题
选项#1:将变量传递给您的视图
public function listeamiAction(Request $request)
{
$ user = $ this-&gt; getUser();
return $this->render('todo/listeami.html.twig',array('user'=>$user));
}
选项#2:访问用户env变量(我认为这是你想要做的)
{% for todo in app.user.todos %}
{{ todo.age }}{% if not loop.last %}, {% endif %}
{% endfor %}${% endif %}
使用app.user,您可以访问声明的UserInterface。重要的是getTodos()是User类中的可访问函数。
选项#3:使用传递给视图的todo变量(todos)
{% if not todos.empty %}
{% for todo in todos %}
{{ todo.age }}{% if not loop.last %}, {% endif %}
{% endfor %}${% endif %}
希望它有所帮助!!