Guest User

Symfony2 Comments

a guest
Apr 15th, 2013
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.45 KB | None | 0 0
  1. <?php
  2.  
  3. // src\Nino\CommentsBundle\Comments\NinoComments.php
  4.  
  5. namespace Nino\CommentsBundle\Comments;
  6.  
  7. use Doctrine\Bundle\DoctrineBundle\Registry;
  8. use Symfony\Component\DependencyInjection\ContainerInterface as Container;
  9. use Nino\CommentsBundle\Entity\Commentaires;
  10. use Nino\CommentsBundle\Entity\Commentaire;
  11.  
  12. class NinoComments
  13. {
  14.     /**
  15.      * @var Doctrine\Bundle\DoctrineBundle\Registry
  16.      */
  17.     protected $doctrine;
  18.     protected $container;
  19.    
  20.     public $coms;
  21.     public $com;
  22.    
  23.     public function __construct(Registry $doctrine,Container $container)
  24.     {      
  25.         // chargement de doctrine et du container
  26.         $this->doctrine = $doctrine;
  27.         $this->container = $container;
  28.     }
  29.      
  30.      
  31.     public function chargerCommentaires($section,$parent){
  32.    
  33.         // récupération du manager
  34.         $em = $this->doctrine->getManager();
  35.        
  36.         // récupération du repository de "commentaires"
  37.         $repository = $em->getRepository('NinoCommentsBundle:Commentaires');
  38.        
  39.         // récupération de l'objet com pour la section et ça page
  40.         $this->com = $repository->findOneBy(array('section' => $section,'parentId' => $parent));
  41.  
  42.         // vérification que l'objet existe
  43.         if (!$this->com) {
  44.             // s'il n'existe pas alors on le créer.
  45.             $this->com = new Commentaires();
  46.             $this->com->setSection($section);
  47.             $this->com->setParentId($parent);
  48.             // persist puis flush pour sauvegarder
  49.             $em->persist($this->com);
  50.             $em->flush();
  51.             // liste de commentaires vide vue qu'il est nouveau
  52.             $this->coms = array();
  53.         }else{
  54.        
  55.             // sinon on charge le repository "commentaire"
  56.             $repository = $em->getRepository('NinoCommentsBundle:Commentaire');
  57.             // et on récupére les 5 derniers commentaires associés a l'objet "commentaires"
  58.             $this->coms = $repository->findBy(array('commentaires'=>$this->com),array('date' => 'desc'),5,0);
  59.        
  60.         }
  61.        
  62.     }
  63.     // function trouvé sur internet afin de pouvoir utiliser le form builder depuis un service
  64.     public function createFormBuilder($data = null)
  65.     {
  66.         return $this->container->get('form.factory')->createBuilder('form', $data);
  67.     }  
  68.    
  69.     public function getFormulaire(){
  70.    
  71.         // Je récupére l'objet commentaire afin de créer le formulaire a partir de son entité
  72.         $commentaire = new Commentaire();
  73.         $form = $this->createFormBuilder($commentaire);
  74.         $form
  75.             ->add('pseudo','text')
  76.             ->add('content','textarea');
  77.            
  78.         // Je récupére la requete
  79.         $request = $this->container->get('request');
  80.         if ($request->getMethod() == 'POST') {
  81.            
  82.             // récupération des données du formulaire
  83.             $formData=$request->request->get('form');
  84.             // je met ces données dans mon objet
  85.             $commentaire->setPseudo($formData['pseudo']);
  86.             $commentaire->setContent($formData['content']);
  87.             // je met comme objet parent le "commentaires" actuel
  88.             $commentaire->setCommentaires($this->com);
  89.             // je charge le manager d'entité puis sauvegarde ce commentaire
  90.             $em = $this->doctrine->getManager();
  91.             $em->persist($commentaire);
  92.             $em->flush();
  93.            
  94.             // j'ajoute un flash bag pour afficher que le commentaire est ajouté
  95.             $this->container->get('session')->getFlashBag()->add('info', 'Commentaire bien ajouté');
  96.         }
  97.        
  98.         // je récupére le formulaire puis le retourne au bundle afin de l'afficher dans la vue
  99.         $form = $form->getForm();
  100.         $form =  $form->createView();
  101.         return $form;
  102.        
  103.     }
  104.    
  105.     // retourne la liste des commentaires
  106.     public function getCommentaires(){
  107.         return $this->coms;
  108.     }
  109. }
  110. ?>
Advertisement
Add Comment
Please, Sign In to add comment