变量"用户"不存在

时间:2017-12-05 13:48:31

标签: symfony-3.3

有人可以帮助我,当我想显示添加的朋友列表(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

1 个答案:

答案 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 %}

希望它有所帮助!!