Symfony: Automatiser la navigation dans votre admin-generator
Petite reprise d’activité du blog après quelques journée assez chargées. Et me voilà vous proposer une pré alpha d’un petit snippet pour symfony 1.2 qui vise à automatiser la génération d’un menu pour l’admin générator qui malheureusement ne propose rien de semblable à l’heure actuelle.
Et combien il devient vite barbant de rajouter les liens de vos nouveaux modules à la main dans votre layout.
Voici donc une solution possible et facile à mettre en place en se basant sur le fichier de routing.
En effet, à chaque ajout de module d’admin via la célèbre:
php symfony propel:generate-admin backend MonModel
Le fichier de routing.yml de l’application en question est modifié avec quelque chose qui ressemble à ça par défaut:
offres:
class: sfPropelRouteCollection
options:
model: Offres
module: offres
prefix_path: offres
column: oid
with_wildcard_routes: trueJ’ai donc fait un petit snippet qui parse ce yml:
class myAdminMenu { public static function getLinks() { $array = sfYaml::load(sfConfig::get('sf_app_config_dir').'/routing.yml'); $links = array(); foreach ($array as $k => $v) { // On n'affiche pas les infos présentes par défaut dans le routing if ($k != 'homepage' && $k != 'default' && $k != 'default_index') { $links[] = $k; } } sort($links,SORT_STRING); // On trie par ordre alphabétique return $links; } }
Et il ne reste plus qu’à boucler dessus dans votre layout.php:
<ul id="menu"> <?php foreach (myAdminMenu::getLinks() as $link): ?> <li><a href="<?php echo url_for($link.'/index') ?>"><?php echo ucfirst($link) ?></a></li> <?php endforeach; ?> </ul>
Bon j’imagine bien qu’il est perfectible au possible surtout si on configure un nom différent du module à la génération du module mais on fera avancer les choses quand le besoin s’en fera sentir.
Tags: admin, PHP, snippet, Symfony
2 Réponses
Laisser un message

salut, je suis en train de regarder pour faire un menu au dynamique à partir de routes. Ce que tu montres là est bien intéressant.
Mais as-tu une idée pour intégrer la vérification des droits sur les actions que tu mets dans le menu. L’idée est de reprendre la configuration de l’action (security.yml) ?
hello,
Si j’ai bien saisi ta question, le principe serait de n’afficher qu’un menu avec les items que l’utilisateur courant peut afficher avec ses droits?
Personnellement je le verrais ainsi:
- A partir du routing.yml on crée des objets sfAction
- Pour chaque objet sfAction, avant de l’afficher on vérifie les droits qu’il demande via sfAction::getCredential et on les compare aux credentials de l’utilisateur courant
Ca parait jouable, mais à voir ce que ca donne en terme de performation, car je ne sais pas si la création d’un objet sfAction est très couteux.