IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Accéder aux entités d'un de mes bundles, de FOSuserBundle [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Par défaut Accéder aux entités d'un de mes bundles, de FOSuserBundle
    Bonsoir,

    J'intègre FOSuserBundle à mon site en suivant http://j-place.developpez.com/tutori...fony2/#LVI-A-1 et je rencontre un problème technique.

    En effet, sur le layout du mon site se trouve un menu, ce dernier est constitué grâce à requêtes sur mes entités (en l’occurrence tous les "Rayon" pour les menus et toutes les "Categorie" pour les sous-menus).

    J'ai donc ce morceaux de code dans tous mes controlleurs pour "nourrir" mon layout (mes pages héritant du layout en question):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $em = $this->getDoctrine()->getEntityManager();
     
    		/*Besoin pour le menu de tous les Rayons et de toutes les catégories*/
            $rayons = $em->getRepository('SiteMainBundle:Rayon')->findAll();
    		$categories = $em->getRepository('SiteMainBundle:Categorie')->findAll();
    ?>
    Jusque là, tout va bien.

    Mais dans le tutorial, l'auteur nous fait créer un layout dans le bundle Utilisateur qui hérite de notre layout pricipal (pour reprendre la base de notre site sur les pages (register etc) générés par FOSuser), et ayant besoin de certains donnés dans mon layout, j'ai une erreur m'indiquant que "rayons" est inconnu.

    J'ai donc été cherché le controlleur du bundle FOSuser, puis j'ai ajouté sans trop y croire dans la méthode "registerAction()", dequoi récupérer les infos suffisantes au layout:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <?php
    public function registerAction()
        {
    		$em = $this->getDoctrine()->getEntityManager();
     
    		/*Besoin pour le menu de tous les Rayons et de toutes les catégories*/
            $rayons = $em->getRepository('SiteMainBundle:Rayon')->findAll();
    		$categories = $em->getRepository('SiteMainBundle:Categorie')->findAll();
     
            $form = $this->container->get('fos_user.registration.form');
            $formHandler = $this->container->get('fos_user.registration.form.handler');
            $confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled');
     
            $process = $formHandler->process($confirmationEnabled);
            if ($process) {
                $user = $form->getData();
     
                if ($confirmationEnabled) {
                    $this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail());
                    $route = 'fos_user_registration_check_email';
                } else {
                    $this->authenticateUser($user);
                    $route = 'fos_user_registration_confirmed';
                }
     
                $this->setFlash('fos_user_success', 'registration.flash.user_created');
                $url = $this->container->get('router')->generate($route);
     
                return new RedirectResponse($url);
            }
     
            return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.'.$this->getEngine(), array(
                'form' => $form->createView(),
                'theme' => $this->container->getParameter('fos_user.template.theme'),
    			'rayons' => $rayons,
    			'categories' => $categories
            ));
        }
    ?>
    mais je me retrouve avec l'erreur:

    "Fatal error: Call to undefined method FOS\UserBundle\Controller\RegistrationController::getDoctrine() in C:\wamp\www\site\vendor\bundles\FOS\UserBundle\Controller\RegistrationController.php on line 30"

    Existe t-il un moyen de récupérer ces informations ? Me conseillez vous de procéder autrement ?

    Merci beaucoup !

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Salut,

    Ce n'est pas la bonne méthode.

    Si tu as un cadre constant sur toutes tes vues, tu ne vas pas copier-coller le même traitement dans tous tes contrôleurs, cela n'a pas de sens.

    Il faut utiliser le méthode render dans twig, qui va en fait appeler un contrôleur et intégrer dans ton template le retour de la vue de ce contrôleur.

    Ainsi, garde 1 seul contrôleur qui définit tes $rayon et $categorie, et qui appelle une vue qui affiche ton cadre constant (attention sans étendre le layout, juste le cadre). Ensuite, depuis ton layout tu fais un {% render "TonBundle:TonController:TonAction" %}

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Par défaut
    Exact !

    Je trouvais ça rébarbatif de renvoyer tout ça dans les méthodes de mon controlleur à chaque fois.

    Merci beaucoup !

    Bon week-end !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/02/2014, 18h32
  2. Réponses: 0
    Dernier message: 21/02/2012, 16h38
  3. Réponses: 22
    Dernier message: 17/12/2010, 18h07
  4. PACKAGING - accéder aux ressources du ear depuis mes war
    Par dasc82 dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 28/09/2009, 10h05
  5. Réponses: 5
    Dernier message: 20/08/2008, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo