Bonjour,

Afin de poursuivre mon auto-formation à symfony, j'ai tenté de créer un composant menu, l'objectif étant de bien comprendre le fonctionnement (l'utilisation d'un plugin pourrait facilité la chose mais ne m'aidera pas dans mon apprentissage )

Voici ce que j'ai donc fait :

Code schema.yml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Menu:
  connection: doctrine
  tableName: sfMenu
  columns:
    label:
      type: string(20)
    url:
      type: string(255)
    priority:
      type: integer
 
# label : libellé du menu. ex: "accueil"
# url : cible de l'item menu. ex: "http://localhost/frontend_dev.php/accueil"
# priority : indice permettant d'ordonner les menus. ex: 1

Code layout.php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
[...]
<?php include_component("menu","index"); ?>
[...]

Le composant Menu et son template :
Code components.class.php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
class menuComponents extends sfComponents
{
  public function executeIndex(sfWebRequest $request)
  {
    // getMenus renvoit la liste des menus ordonnés selon Priority (orderBy)
    $this->menus = Doctrine_Core::getTable('Menu')->getMenus();
 
    // affecte à currentMenu l'url demandé
    $this->currentMenu = $request->getUri();
  }
}

Code _index.php : 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
<div id="menu" class="float-right">
    <ul>
      <?php
      $last = count($menus)-1;
 
      foreach ($menus as $key=>$menu) {
        echo "<li>";
        if ($menu->getUrl()==$currentMenu) {
            echo "<span class=\"menuonpage\">".$menu->getLabel()."</span>";
        } else {
            echo link_to($menu->getLabel(),$menu->getUrl());
        }
        if ($key < $last) { echo " | " ;}
        echo "</li>";
      }  
      ?>
    </ul>
</div>

Mon menu fonctionne bien pour un contexte donné. Cependant, je ne suis pas certain que ma méthode soit "symfony-friendly" et, comme elle tient compte d'urls absolues, elle ne fonctionne pas en dehors de son contexte (frontend_dev.php/prod/etc).

Bref, je suis preneur de tout conseil

Merci d'avance.

PS: pour détailler le fonctionnement, mon menu se présente ainsi :
accueil | blog | contact

accueil est en gras car il s'agit de la page courante
les autres liens (soulignés) représente les liens vers les autres pages