Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony] Comment faire des liens ?

    26 février 2017 à 17:28:05

    Bonjour,

    Je suis actuellement en train de développer un site web en PHP avec Synfony, et j'aimerais savoir sous quelle forme, et comment, je dois écrire mes liens vers les autres pages.

    Merci d'avance,
    bonne journée. 

    • Partager sur Facebook
    • Partager sur Twitter
    A soutenir absolument :  https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men
      26 février 2017 à 18:07:38

      Bonjour,

      Un lien html n'est pas particulier à Symfony : par exemple dans une vue il faut utiliser la balise html <a>.

      Exemple assez complet en utilisant bootstrap pour la partie css :

      <a href="{{ path('nom_de_la_route', { 'nom_param1': valeur_param1 }) }}" class="btn btn-primary btn-sm">
      <i class="glyphicon glyphicon-plus"></i> {{ "label_du_bouton" | trans }}
      </a>

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        27 février 2017 à 0:24:43

        Tout d'abord, merci pour cette réponse aussi rapide.
        Cependant, il faut savoir que je n'utilise pas Twig dans mon site, le trouvant plus encombrant qu'autre chose.
        Savez-vous la méthode à utiliser en PHP?

        Merci,
        Ekim Shan. 

        • Partager sur Facebook
        • Partager sur Twitter
        A soutenir absolument :  https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men
          27 février 2017 à 8:42:05

          Je n'ai pas parlé de twig mais de vue.

          Les balises que j'indique ici sont des balises html (<a href= ... ></a>) et des classes css.

          En php et dans une vue c'est la même chose.

          A+

          • Partager sur Facebook
          • Partager sur Twitter
            27 février 2017 à 16:47:38

            certes, mais j'ai essayé de faire ainsi :

            <a href="/ma_route_cible">projets</a>

            mais cela ne m'a pas mené à l'endroit désiré (http://localhost/hangus-corporation/web/app_dev.php/projets/) mais à l'URL "http://localhost/projets/".

            De plus, dans votre code, dans l'attribut href du lien, vous insérez du contenu Twig. Je suppose que c'est celui-ci qui représente la route, mais je ne connais pas son équivalent en PHP.

            • Partager sur Facebook
            • Partager sur Twitter
            A soutenir absolument :  https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men
              27 février 2017 à 16:51:53

              Salut !

              Si je prends la documentation, je vois ceci, gratis pro remissiores :

              <a href="<?php echo $view['router']->path('welcome') ?>">Home</a>
              

              -
              Edité par Ymox 27 février 2017 à 16:52:07

              • Partager sur Facebook
              • Partager sur Twitter
                27 février 2017 à 17:34:09

                Bonjour Ymox,

                Donc, si j'ai une route nommée "projets", il suffit que je remplace 'welcome' par "/projets" pour que ça fonctionne?

                • Partager sur Facebook
                • Partager sur Twitter
                A soutenir absolument :  https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men
                  27 février 2017 à 20:51:25

                  Le problème c'est de savoir désigner une route par son url et il faut donc connaître la notion d'url absolue ou relative.

                  Pour debugger l'utilisation de la console du navigateur est bien utile. ;)

                  a+

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 février 2017 à 23:30:19

                    Alors j'ai essayé la méthode d'Ymox, mais cela me retourne l'erreur "helper 'routeur' does not exists" (erreur 500).
                    Pourtant, j'ai bien mis comme il était écrit dans l'exemple.

                    Quant aux URL relatives ou absolues, dans la mesure où mon site n'est pas encore propulsé, je le fait tourner sous Wamp sur ma machine perso, je suppose qu'il ne faut utiliser que des URLs relatives.

                    Bonne journée (ou bonne nuit).

                    • Partager sur Facebook
                    • Partager sur Twitter
                    A soutenir absolument :  https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men
                      28 février 2017 à 7:06:37

                      As tu regardé la documentation relative à ton besoin ? http://symfony.com/doc/current/templating/PHP.html

                      Sais tu te servir des outils de debug d'un navigateur ? par exemple sous Chrome, click droit de la souris et menu "inspecter". C'est un mine d'information pour savoir ce qui ne va pas ... par exemple voir la console.

                      A+

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 février 2017 à 10:21:07

                        EkimShan a écrit:

                        Alors j'ai essayé la méthode d'Ymox, mais cela me retourne l'erreur "helper 'routeur' does not exists" (erreur 500).
                        Pourtant, j'ai bien mis comme il était écrit dans l'exemple.

                        Quant aux URL relatives ou absolues, dans la mesure où mon site n'est pas encore propulsé, je le fait tourner sous Wamp sur ma machine perso, je suppose qu'il ne faut utiliser que des URLs relatives.

                        Bonne journée (ou bonne nuit).


                        Ymox t'a donné une route en exemple, qui plus est n'est pas très difficile à comprendre... Il faut juste prendre le temps de regarder comment ça fonctionne et modifier les variables nécessaires pour ton url !
                        Voila comment faire:

                        //Exemple de Ymox
                        <a href="<?php echo $view['router']->path('welcome') ?>">Home</a>
                        
                        //pour ta route Projets
                        <a href="<?php echo $view['router']->path('projets') ?>">Mes projets</a>

                        Attention car projets de "path('projets')" ne correspond pas à ce qui est inscrit dans l'url, mais au nom unique de la fonction dans ton controller !
                        Je reprends un exemple du cours:

                        //exemple du cours SF3 d'OC
                        oc_platform_home:
                            path:      /{page}
                            defaults:
                                _controller: OCPlatformBundle:Advert:index
                                page:        1
                            requirements:
                                page: \d*
                        
                        //ici la route sera
                        <a href="<?php echo $view['router']->path('oc_platform_home') ?>">Ma page</a>

                        -
                        Edité par Radiax18 28 février 2017 à 10:26:56

                        • Partager sur Facebook
                        • Partager sur Twitter

                        </radiax>

                          1 mars 2017 à 17:51:28

                          Bonjour à tous!

                          Alors, pour l'erreur "helper 'routeur' does not exists", j'ai trouvé. En fait, c'est moi qui est totalement aveugle : j'ai écrit "routeur" en français, au lieu de "router", en anglais!

                          Bon, par contre, après, cela m'affiche l'erreur :

                          Unable to generate a URL for the named route "/projets" as such route does not exist.

                          alors que j'ai bien référencé ma route dans mon "routing.yml", écrit l'action dans mon controller, et créé le fichier "projets.html.php".

                          Au besoin, je vous met ma route YAML :

                          hangus_corporation_website_projets:
                              path: /projets
                              defaults : { _controller: HangusCorporationWebsiteBundle:Default:projets }


                          Bonne journée, et à bientôt.

                          • Partager sur Facebook
                          • Partager sur Twitter
                          A soutenir absolument :  https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men
                            1 mars 2017 à 17:52:47

                            La route doit être désignée par son nom, ici la partie hangus_corporation_website_projets.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              1 mars 2017 à 18:31:31

                              Salut Ymox.

                              Alors, je vient d'essayer ce que tu m'as dit, et ça marche!
                              Merci beaucoup! 

                              En revanche, si j'essaye d'utiliser la méthode d'affichage des assets conseillée dans la documentation de Symfony :

                              <img src="<?php echo($view['assets']->getUrl('images/logo.png'));?>">

                              Cela ne fonctionne pas. Il n'y a pas d'erreur affichée de Symfony mais l'image ne s'affiche pas. Pourtant, je suis sûr d'avoir une image de ce nom dans mon_bundle/resources/public/images.

                              -
                              Edité par EkimShan 1 mars 2017 à 18:32:12

                              • Partager sur Facebook
                              • Partager sur Twitter
                              A soutenir absolument :  https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men
                                1 mars 2017 à 18:55:40

                                Il faut du coup spécifier que ton image est dans ton bundle, Symfony ne peut pas le deviner. Aussi, il faut avoir "installé" les assets avec la commande assets:install. A bien refaire à chaque ajout et modification si tu es sous Windows — je ne me rappelle plus de ce qu'il faut avoir (et non faire) pour que ce ne soit pas nécessaire.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  2 mars 2017 à 17:39:48

                                  Salut Ymox,

                                  pour faire que l'installation des assets ne soit pas nécessaire à chaque changement, il faut faire un assets:install --symlink, ce que j'ai fait. Mais mon image ne s'affiche pas, tout du moins quand je met images/logo.png. par contre, si je met l'adresse depuis le répertoire web, comme ceci : bundles/HangusCorporationWebsite/images/logo.png, ça fonctionne. Mais dans ce cas-là, je ne voit pas l’intérêt d'utiliser une méthode si alambiquée, plutôt que de simplement mettre l'URL depuis le répertoire web...

                                  Bonne journée,
                                  Ekim Shan. 

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  A soutenir absolument :  https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men
                                    2 mars 2017 à 17:51:46

                                    Il me semble me souvenir que tu pouvais mettre quelque chose comme @MonBundle/images/nom.extension, et que la fonction asset() traduisait justement en un chemin comme le tien… et cette dernière s'arrange surtout pour ajouter les éventuels dossiers nécessaires si Symfony n'est pas à la racine web du serveur.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 mars 2017 à 18:21:25

                                      Cela ne serait pas plutôt en Twig?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      A soutenir absolument :  https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men
                                        2 mars 2017 à 22:26:14

                                        Râââh, désolé, j'ai complètement oublié que tu ne l'utilisais pas  :ange:

                                        Note que logiquement, c'est bien le service de routing de Symfony derrière Twig qui entre en jeu, donc je m'attendrais à ce que ça fonctionne aussi en PHP.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          2 mars 2017 à 23:23:08

                                          Hélas, non...
                                          J'ai essayé cet après-midi, mais ça ne fonctionne pas...
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          A soutenir absolument :  https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men

                                          [Symfony] Comment faire des liens ?

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown