2010-06-17 5 views
5

Récemment, j'essaie de migrer mon application de CakePHP vers Grails. Jusqu'à présent, tout s'est bien passé, tout ce que je peux faire avec CakePHP, je peux le faire avec beaucoup moins de code dans Grails. Cependant, je voudrais poser une question:Préfixe de mappage d'URL dans Grails

Dans CakePHP, il y a une fonction de préfixe d'URL qui vous permet de donner préfixe à une certaine URL d'action, par exemple, si j'ai ces actions dans mon contrôleur:

PostController
admin_add
admin_editer
admin_delete

Je ne peux accéder à partir du U RL:

monsite/admin/post/ajouter
monsite/admin/post/modifier/1
monsite/admin/post/supprimer/2

au lieu de:

mysite/post/admin_add
mysite/post/admin_editer/1
mysite/post/admin_delete/2

Y a-t-il un moyen de le faire dans Grails, ou au moins une alternative?

Répondre

1

Je n'ai pas testé, mais essayez ceci:

"mysite/$prefix/$controller/$method/$id?"{ 
    action = "${prefix}_${method}" 
} 

Il construit le nom d'action du préfixe et la méthode.

+0

J'ai essayé, mais le problème est, je dois répéter cette opération pour toutes les actions ... – Furunomoe

5

documentation Grails URL Mappings ne vous aide pas dans ce cas particulier (Amra, la prochaine fois essayez vous-même et poster une réponse que si elle est une aide). La solution de Daniel était proche, mais ne fonctionnerait pas, parce que:

  1. la partie d'action doit être dans une fermeture lors de la création dynamique
  2. tous les paramètres nommés à l'exclusion des « contrôleur », « action » et « id » sont accessibles via l'objet params

Une solution pourrait ressembler à ceci:

"/admin/$controller/$adminAction?/$param?"{ 
    action = { "admin_${params.adminAction}" } 
} 

la clé est de ne pas nommer le paramètre comme « action », car il semble être directement mappée à une action et ne peut pas être outrepassé.

J'ai essayé aussi une solution dynamique avec des préfixes génériques et il semble fonctionner aussi bien:

"/$prefix/$controller/$adminAction?/$param?"{ 
    action = { "${params.prefix}_${params.adminAction}" } 
} 
Questions connexes