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 :

Admin Generator et route [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Août 2006
    Messages : 55
    Par défaut Admin Generator et route
    Bonjour,

    J'ai généré un module au moyen de l'admin generator et lui ai ajouté des actions pour faire un traitement particulier des données de la table. Parmi celles-ci, se trouve un formulaire (dérivé directement de sfForm). J'ai donc deux actions : ListEditPoste et ListCreatePoste qui fonctionnent correctement quand on les appelle depuis un lien autogénéré via le generator.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    _list_td_actions.php (dans le cache)
    [...]
    <?php echo link_to(__('Postes', array(), 'messages'), 'copisim_periode/ListEditPoste?id='.$copisim_periode->getId(), array()) ?>
    [...]
    Mais si je reproduis ce lien dans ma balise form avec un url_to() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "<form action="<?php echo url_for('copisim_periode/ListCreatePoste?id='.$copisim_periode->getId()); ?>" method="post">
    j'obtiens une erreur de route :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    404 | Not Found | sfError404Exception
    Action "copisim_periode/1" does not exist.
    J'ai du mal à saisir pourquoi ça marche pour l'admin generator et pas pour moi...

    J'ai aussi testé (en vain - la route n'existe pas) avec sf_route :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="<?php echo url_for(array('sf_route' => 'copisim_periode_list_create_poste', 'sf_subject' => $copisim_periode)); ?>" method="post">
    Et google ne m'a pas aidé non plus...

    Bref, faut-il que je crée une route supplémentaire (sachant qu'elle existe déjà forcément quelque part) ? ou bien abandonner l'admin generator (qui pourtant est fantastique) pour ce module (du boulot en perspective) ? ou bien (mais je m'y refuse) copier le lien en dur dans le template ? Au final, j'aimerais surtout comprendre...

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Qu'as tu dans ton fichier route.yml ?

    Quel version de symfony ?

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Août 2006
    Messages : 55
    Par défaut
    Symfony 1.4.8.

    Mon routing.yml était celui par défaut à la création de l'appli de backend et des admin_modules. Le but étant aussi de découvrir les possibilités de l'admin generator.
    L'erreur que j'obtenais était due au fait que les routes par défaut étaient présentes et donc à la lecture, symfony interprétait la route :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    default:
      url:   /:module/:action/*
    J'ai donc viré (commenté pour le moment) ces routes et il n'en demeure pas moins qu'il ne trouve toujours pas l'action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    404 | Not Found | sfError404Exception
    Empty module and/or action after parsing the URL "/copisim_poste/1/ListEditPoste" (/).
    Et pourtant la même url collée dans la ligne de commande me renvoie sur la bonne page.
    Il me vient une idée en écrivant : est ce que l'admin generator ne créerait pas des routes uniquement pour la méthode GET ? Ce qui expliquerait pourquoi la route existe bel et bien quand on y accède par lien web mais pas lorsque c'est un form avec method=post qui y fait référence...

    Pour info, ce qui nous intéresse encore dans le routing.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [...]
    copisim_periode:
      class: sfDoctrineRouteCollection
      options:
        model:                CopisimPeriode
        module:               copisim_periode
        prefix_path:          /copisim_periode
        column:               id
        with_wildcard_routes: true
    [...]
    Edit : je confirme, si je transforme mon form pour utiliser la methode GET, je n'ai plus de soucis de route... Reste à faire un choix entre ajouter une route pour POST ou garder le formulaire en GET (j'aime pas trop). Dans le cas de la première solution, y a-t-il un attribut pour y faire référence directement dans la sfDoctrineRouteCollection copisim_periode ou dois-je faire au plus simple en rajoutant juste la route à la fin ?

    Edit bis : à la lecture rapide de la doc de la classe sfDoctrineRouteCollection, pour pouvoir prendre directement en compte ma route, il faudrait que je crée une classe similaire (voire dérivée ?)... Je pense que je vais me contenter d'une route ajoutée à la main dans le routing.yml pour le moment.

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Si tu veux bien utiliser le système de route, il est important de désactiver les routes par défaut, ou, au pire, de les laisser en dernière lignes du fichier.

    Le fichier route.yml est parsé du début à la fin, ce qui implique deux choses :

    • Il faut mettre les routes spécifique avant les routes générale, surtout si elles partagent une même racine d'url.
    • Il faut mettre les routes les plus utilisées par tes clients au début du fichier pour en accélérer la résolution.

    En effet, dés que le moteur de route en trouve une qui répond à sa recherche, il abandonne.

    C'est aussi pour cela qu'il est plus intéressant, dans la génération des URL de passer par le nom de la route plutôt que de laisser le moteur chercher par lui même. Plus rapide et plus sur. Pour les routes collections elles sont en réalité découpées en de multiple route avec un surfixe pour les identifier, tu trouveras cela facilement a partir du CLI de symfony et de l'option qui traite les routes.

    Ta méthode pour avoir une route spécifique en plus de celles de la collection me semble la bonne et est celle préconisée par symfony dans jobeet. La modification de l'objet collection ne peut se justifier que si tu as un très grand nombre de cas similaires dans tes applications.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] admin-generator et routing
    Par thecanea dans le forum Symfony
    Réponses: 3
    Dernier message: 09/07/2010, 10h53
  2. [1.x] [admin-generator] éditer les clés primaires
    Par Mitaka dans le forum Symfony
    Réponses: 2
    Dernier message: 04/06/2008, 14h33
  3. [1.x] Admin generator - images administrables
    Par wadzat dans le forum Symfony
    Réponses: 3
    Dernier message: 30/05/2008, 15h39
  4. Réponses: 7
    Dernier message: 25/05/2008, 17h06
  5. [1.x] Champs i18n disabled par l'admin generator
    Par wadzat dans le forum Symfony
    Réponses: 1
    Dernier message: 22/05/2008, 14h51

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