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 :

Traiter une page différemment selon son slug


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2012
    Messages : 91
    Par défaut Traiter une page différemment selon son slug
    Bonjour à tous,

    J'ai une entité Page qui possède un slug.
    Je récupère donc le slug dans mon controller pour afficher le contenu adéquat.
    Je voudrais pour certaine page avoir un comportement différent.
    La seul solution que j'ai trouvé est de faire un switch selon le slug.
    Le problème est que le jour ou le slug change (pour du référencement par exemple) il me faut également le changer dans le controller.

    Voilà ma classe Page :
    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
     
    class Page extends BaseEntity
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @Gedmo\Slug(fields={"frontname"})
         * @ORM\Column(length=255, unique=true)
         */
        private $slug;
     
        //RESTE DE LA CLASS
    et mon controller :

    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
     
    class PageController extends Controller
    {
     
        public function showAction(Request $request)
        {
            $slug = $request->get('slug_page');
     
            $page = $this->getDoctrine()->getRepository('AppBundle:Autre')->findOneBy(array('slug' => $slug));
            if (!$page) {
                throw $this->createNotFoundException('Page introuvable.');
            }
            switch($slug){
                 case  'notre-equipe': 
                         return $this->render('@App/Frontend/equipe/list.html.twig');
           // etc....
            }
     
            return $this->render('AppBundle::Frontend/page/index.html.twig', array(
                'page' => $page,
            ));
        }
     
    }

    N'y aurait-il pas une solution plus propre pour traiter ces pages différemment ?
    Je suis sous symfony 2.7.

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Si tu veux, tu peux crééer une route par variable(un slug n'est qu'une variable).

    Ou alors mettre une association quelque part, en BDD ou ailleur te permettant de trouver de manière générique la bonne page.(genre ajouter l'url cible dans ton entité)

    Mais j'ai du mal a comprendre ce que tu veux faire, ca ressemble furieusement a du routage... ce que fait naturellement le controlleur.

  3. #3
    Membre chevronné
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Billets dans le blog
    7
    Par défaut
    Il te faut une information unique non changeable,

    une idée est de faire ton switch avec l'ID de l'entité (déjà récupéré à partir du slug)

    Tu peut aussi créer des constantes dans l'entités pour centraliser ces données statiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    class Page extends BaseEntity
    {
       const NOTRE_EQUIPE_ID = 1;
       const AUTRE_ID = 2;
    et les utiliser après dans le controlleur:

    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
     
     
    class PageController extends Controller
    {
     
        public function showAction(Request $request)
        {
            $slug = $request->get('slug_page');
     
            $page = $this->getDoctrine()->getRepository('AppBundle:Autre')->findOneBy(array('slug' => $slug));
            if (!$page) {
                throw $this->createNotFoundException('Page introuvable.');
            }
            switch($page->getId()){
                 case  Page::NOTRE_EQUIPE_ID: 
                         return $this->render('@App/Frontend/equipe/list.html.twig');
                 case  Page::AUTRE_ID: 
           // etc....
            }
     
            return $this->render('AppBundle::Frontend/page/index.html.twig', array(
                'page' => $page,
            ));
        }
     
    }

Discussions similaires

  1. Imprimer une page spécifique selon son rang
    Par rodex001 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/03/2015, 22h38
  2. Réponses: 5
    Dernier message: 13/05/2008, 16h57
  3. modifier l'objet d'une page à partir de son iframe
    Par jamy1664 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/07/2007, 16h29
  4. créer une fenetre pour accéder a une page en laissant son mail
    Par binouzman dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 03/07/2006, 08h36

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